s******e 发帖数: 3 | 1 我不熟DL,而且开发语言只能是Java。现在有个问题:
我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是
BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使用
BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。
另外,运行环境的内存和性能都不是很友好。
谢谢 |
c**x 发帖数: 137 | 2 得看你是不是有label好得数据,有的话直接训练;没有的话没什么好办法,搜一下
sentence embedding吧 |
t******o 发帖数: 61 | 3 try:
cosine distance
KL distance
should be enough |
s******e 发帖数: 3 | 4
感谢 timetodo 和 cotx 的回复。我一并回答你们提到的内容。
我这个不是 classification,是Similarity。Embedding 已经有了,但是 BERT 的
embedding 直接用来做 sentence similarity 效果很差。有文档提到需要一些转换,
甚至都有代码,但是我本身对 DL 和 TF 都不熟,居然没看懂,也没有时间去深入,
也就没有办法翻译成java。
我已经实现了 cosine 和 KL,效果不好。这里有介绍:
https://www.reddit.com/r/LanguageTechnology/comments/ax6o41/how_to_compute_
sentence_similarity_using_bert/
我使用的环境必须是java,而且资源有限,无法使用很多现成的库,必须自己实现某些
矩阵算法。
希望懂DL大法的高手帮忙看一下 BERT 的一些代码,这个对 similarity 的 额外处理
到底执行了哪些运算,如果是 cosine distance 之类简单矩阵运算组合,我打算自己
实现。
【在 t******o 的大作中提到】 : try: : cosine distance : KL distance : should be enough
|
s******e 发帖数: 3 | 5 我在网上找到相关例子,需要对模型进行fine tuning,然后才能用来产生可用的
sentence embedding。
【在 s******e 的大作中提到】 : : 感谢 timetodo 和 cotx 的回复。我一并回答你们提到的内容。 : 我这个不是 classification,是Similarity。Embedding 已经有了,但是 BERT 的 : embedding 直接用来做 sentence similarity 效果很差。有文档提到需要一些转换, : 甚至都有代码,但是我本身对 DL 和 TF 都不熟,居然没看懂,也没有时间去深入, : 也就没有办法翻译成java。 : 我已经实现了 cosine 和 KL,效果不好。这里有介绍: : https://www.reddit.com/r/LanguageTechnology/comments/ax6o41/how_to_compute_ : sentence_similarity_using_bert/ : 我使用的环境必须是java,而且资源有限,无法使用很多现成的库,必须自己实现某些
|
c**x 发帖数: 137 | 6 不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来
算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用
来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现
相似度都很高。
具体你可以参考这里的结果
https://www.zhihu.com/question/354129879
总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
【在 s******e 的大作中提到】 : 我在网上找到相关例子,需要对模型进行fine tuning,然后才能用来产生可用的 : sentence embedding。
|
s******e 发帖数: 3 | 7
再次感谢指点。我暂时没有训练数据。word2vec/glove模型太大,我这里不适合使用。
我在想是否有通用的fine tuning,不需要训练数据就可以对输出进行 cosine
similarity 计算。当然fine tuning 不能太复杂,否则我还要实现全部相关的运算。
【在 c**x 的大作中提到】 : 不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来 : 算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用 : 来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现 : 相似度都很高。 : 具体你可以参考这里的结果 : https://www.zhihu.com/question/354129879 : 总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
|
w********m 发帖数: 1137 | |
s******e 发帖数: 3 | 9 兜兜转转还是绕不开。不知为何特讨厌python。
【在 w********m 的大作中提到】 : 还是得用Python : 把数据传回java即可
|
s******e 发帖数: 3 | 10 更正一下,不是python,是整个 dl 届的不良风气。
我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
.0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
然还是svm效果最好。
这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
得小心使用,说改就改,说停就停。
浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
【在 s******e 的大作中提到】 : 兜兜转转还是绕不开。不知为何特讨厌python。
|
|
|
b******g 发帖数: 77 | 11 用 universal sentence encoder |
s********k 发帖数: 6180 | 12 先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果
好不好再工程化
另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直
接上模型不一定好
用
【在 s******e 的大作中提到】 : 我不熟DL,而且开发语言只能是Java。现在有个问题: : 我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是 : BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使用 : BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。 : 另外,运行环境的内存和性能都不是很友好。 : 谢谢
|
c*******v 发帖数: 2599 | 13 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,
cpp,python过硬。
假如自己实现的话,哪怕就是DOT,norm,你的效率和质量要赶上fortran,cpp,python那
也很废功夫的。这样写出来你自己不就成了你批评的那些库嘛!
我建议用python的numpy.。绕过基础线性代数操作自己写这个坑。可以在numpy的基础
上写别的算法。
Overall来讲,把数值计算的算法在web server host起来,远不是一般人想象的那么简
单。half
made的各种软件的出现很正常。这个倒不是dl届的问题。这是cs的人很少学numerical
computation 的问题,传统上这块归EE,ME,化学,生物什么的。跟java不是一套班子。
你弄个石油钻井的流体模拟,放java上变成web service,一样会碰到很多问题。
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西
,版本
号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月
就要小
心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。
训练个
模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,
我用下
来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得
对软件
工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern
。狗家
的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
【在 s******e 的大作中提到】 : 更正一下,不是python,是整个 dl 届的不良风气。 : 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0 : .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了, : 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型, : TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居 : 然还是svm效果最好。 : 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多 : 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西 : 得小心使用,说改就改,说停就停。 : 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
|
s******e 发帖数: 3 | 14 去看了一下,有小模型,准备以后尝试一下。谢谢
【在 b******g 的大作中提到】 : 用 universal sentence encoder
|
s******e 发帖数: 3 | 15 已经有 web service 版本的应用,虽然比不上外边的专业产品,但够用了。最近公司
的设备遇到了弱网问题,我寻思着是否可以把一部分功能放到前端去。之前的软件都是
模块化的,出于部署考虑,所有模块实现了远程/本地调用切换。所以我在考虑,在弱
网时,使用一个弱化版的嵌入式对话机器人,一旦网络通畅,就自动切换回去。这个就
是使用场景。
我现在打算先用分类算法将就一下,等以后有时间再考虑一下其他。
【在 s********k 的大作中提到】 : 先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果 : 好不好再工程化 : 另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直 : 接上模型不一定好 : : 用
|
s******e 发帖数: 3 | 16 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则是尽量
少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候,引入的包还
有根据需要重新打包。
numerical
子。
【在 c*******v 的大作中提到】 : 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran, : cpp,python过硬。 : 假如自己实现的话,哪怕就是DOT,norm,你的效率和质量要赶上fortran,cpp,python那 : 也很废功夫的。这样写出来你自己不就成了你批评的那些库嘛! : 我建议用python的numpy.。绕过基础线性代数操作自己写这个坑。可以在numpy的基础 : 上写别的算法。 : Overall来讲,把数值计算的算法在web server host起来,远不是一般人想象的那么简 : 单。half : made的各种软件的出现很正常。这个倒不是dl届的问题。这是cs的人很少学numerical : computation 的问题,传统上这块归EE,ME,化学,生物什么的。跟java不是一套班子。
|
c*******v 发帖数: 2599 | 17 嵌入设备(有条件的话)我觉得c/cpp有优势。
: 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我
的原则
是尽量
: 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候
,引入
的包还
: 有根据需要重新打包。
: numerical
: 子。
【在 s******e 的大作中提到】 : 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则是尽量 : 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候,引入的包还 : 有根据需要重新打包。 : : numerical : 子。
|
s******e 发帖数: 3 | 18 上次用c是2005之前,也是嵌入系统。如今都安卓嵌入系统。老了,智商不够,拾起来
难了。
【在 c*******v 的大作中提到】 : 嵌入设备(有条件的话)我觉得c/cpp有优势。 : : : 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我 : 的原则 : 是尽量 : : 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候 : ,引入 : 的包还 : : 有根据需要重新打包。 : : numerical
|
b******g 发帖数: 77 | 19 tf的productinization
server端的model用 model server host
mobile端转化成tflite 格式,tflite不支持所有operation 比如文本模型常用的
sparse。不是所有模式都能转化 |
m******r 发帖数: 1033 | 20 请问大神为啥svm好 ? 能比线性回归好很多吗 ?
0
【在 s******e 的大作中提到】 : 更正一下,不是python,是整个 dl 届的不良风气。 : 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0 : .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了, : 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型, : TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居 : 然还是svm效果最好。 : 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多 : 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西 : 得小心使用,说改就改,说停就停。 : 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
|
|
|
s******e 发帖数: 3 | 21 我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实
际使用时感觉不到。
【在 m******r 的大作中提到】 : 请问大神为啥svm好 ? 能比线性回归好很多吗 ? : : 0
|
m******r 发帖数: 1033 | 22 看来大神在线答疑。
svm这个东西, 我觉着很多做生物统计的特别喜欢,什么原因不知道。 我做的东西比
较简单,经常和普通线性回归比较下,大部分情况性能差不多,但svm很多R软件包调用
起来不方便, 比如kernel这个参数,理论上应该有好几种, 圆的,方的(是不是有三
角的我是记不清了),有的作者也许图省事,只提供⚪的, radius, 是不是很别
扭。 而且其他几个参数, 也完全没有章法可循,从0到无穷大,让人怎么选?
从零到一,或者从一到一万选个最优解,还能试一试。 无穷大, 哪里是个尽头。
【在 s******e 的大作中提到】 : 我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实 : 际使用时感觉不到。
|
S*******4 发帖数: 18 | |
w***g 发帖数: 5958 | 24 我不信他们内部项目也这么倒腾。
0
【在 s******e 的大作中提到】 : 更正一下,不是python,是整个 dl 届的不良风气。 : 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0 : .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了, : 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型, : TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居 : 然还是svm效果最好。 : 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多 : 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西 : 得小心使用,说改就改,说停就停。 : 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
|
s******e 发帖数: 3 | 25 谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。
但还是太大。以后替换服务器端的服务会考虑。
【在 S*******4 的大作中提到】 : https://github.com/UKPLab/sentence-transformers : I have tried this, beats USE from google.
|
s******e 发帖数: 3 | 26 pytorch 感觉比 tf 正规多了。
【在 s******e 的大作中提到】 : 谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。 : 但还是太大。以后替换服务器端的服务会考虑。
|
s******e 发帖数: 3 | 27 我了解到部门,都不是这样。但是谷歌开源出来的东西,都不太尊重开发者。有很长一
串东西,比如GWT(现在谁还在用,TM我就上过贼船),比如guava,内部一些东西改动
太大,TF就更不用说了。
【在 w***g 的大作中提到】 : 我不信他们内部项目也这么倒腾。 : : 0
|
w********m 发帖数: 1137 | 28 以后换人换项目
都是重写不是重构
Python重写快
这是优点 |
s******e 发帖数: 3 | 29 再次感谢各位的帮助。
感谢 Shane2014 提供的 sentence-transformers
感谢 beidapig 提供的 universal sentence encoder
最近趁热打铁,更新了部分服务器端的NLP组件,sentence similarity 部分最后选用
了 sentence-transformers,套个flask做微服务。
分享一下为啥这么做。这个结果不是分析他们的Paper,我不懂,也没打算弄懂,纯粹
是从应用和工程角度。
sentence-transformer:
Paper 非常新,作者列出的结果比USE好
有几个很直白的 Example,直接上手测试,非常顺利
基于 PyTorch 和 huggingface / transformers
universal sentence encoder:
Paper 比较老(2018vs2019)
Google的模型,很难离开TF
结果也非常好,但比 ST 略差
网上的Example都需要自己组装,让它跑起来也花了点时间,主要还是在和TF做斗争。
我对狗家的东西有点抗拒,所以最后选了Sentence-transformer。
有个非常有趣的结果,两个模型都没有针对中文的预训练模型,但有一个多语言的模型
。我尝试了一下,发现可以匹配不同语言之间的语义,跨语言匹配的效果比同语言略差
,但也够用。这个对我们的应用还是非常有用的。我开始尝试改造应用,使用同一个机
器人,加一个语言侦测器,就可以让我们的机器人同时讲16种语言。 |
x****u 发帖数: 44466 | 30 pytorch不错
keras被谷歌搞死前也不错
0
【在 s******e 的大作中提到】 : 更正一下,不是python,是整个 dl 届的不良风气。 : 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0 : .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了, : 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型, : TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居 : 然还是svm效果最好。 : 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多 : 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西 : 得小心使用,说改就改,说停就停。 : 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
|
|
|
x****u 发帖数: 44466 | 31 一般来说内部项目只会更折腾,不然那么多人干什么啊
【在 w***g 的大作中提到】 : 我不信他们内部项目也这么倒腾。 : : 0
|
n********t 发帖数: 21 | 32 可以试试java native interface 矩阵运算用c++完成
:线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,
:cpp,python过硬。 |