看帖神器
未名空间
追帖动态
头条新闻
每日新帖
最新热帖
新闻存档
热帖存档
文学城
虎扑论坛
未名空间
北美华人网
北美微论坛
看帖神器
登录
← 下载
《看帖神器》官方
iOS App
,体验轻松追帖。
请教一个DL/NLP问题
查看未名空间今日新帖
最新回复:2020年4月30日 15点43分 PT
共 (33) 楼
返回列表
订阅追帖
只看未读
更多选项
阅读全帖
只看图片
只看视频
查看原帖
s
sanwadie
大约 4 年
楼主 (未名空间)
我不熟DL,而且开发语言只能是Java。现在有个问题:
我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是
BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使用 BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。
另外,运行环境的内存和性能都不是很友好。
谢谢
c
cotx
大约 4 年
2 楼
得看你是不是有label好得数据,有的话直接训练;没有的话没什么好办法,搜一下
sentence embedding吧
t
timetodo
大约 4 年
3 楼
try:
cosine distance
KL distance
should be enough
s
sanwadie
大约 4 年
4 楼
【 在 timetodo (time2do) 的大作中提到: 】
: try:
: cosine distance
: KL distance
: should be enough
感谢 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 之类简单矩阵运算组合,我打算自己
实现。
s
sanwadie
大约 4 年
5 楼
我在网上找到相关例子,需要对模型进行fine tuning,然后才能用来产生可用的
sentence embedding。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 感谢 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
cotx
大约 4 年
6 楼
不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来
算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用
来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现相似度都很高。
具体你可以参考这里的结果
https://www.zhihu.com/question/354129879
总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 感谢 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,而且资源有限,无法使用很多现成的库,必须自己实现某些
: 矩阵算法。
: ...................
s
sanwadie
大约 4 年
7 楼
【 在 cotx (Inter Milan!) 的大作中提到: 】
: 不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来
: 算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用
: 来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现
: 相似度都很高。
: 具体你可以参考这里的结果
: https://www.zhihu.com/question/354129879
: 总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
再次感谢指点。我暂时没有训练数据。word2vec/glove模型太大,我这里不适合使用。我在想是否有通用的fine tuning,不需要训练数据就可以对输出进行 cosine
similarity 计算。当然fine tuning 不能太复杂,否则我还要实现全部相关的运算。
w
walkrandom
大约 4 年
8 楼
还是得用Python
把数据传回java即可
s
sanwadie
大约 4 年
9 楼
兜兜转转还是绕不开。不知为何特讨厌python。
【 在 walkrandom (walkrandom) 的大作中提到: 】
: 还是得用Python
: 把数据传回java即可
s
sanwadie
大约 4 年
10 楼
更正一下,不是python,是整个 dl 届的不良风气。
我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0.0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
然还是svm效果最好。
这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西得小心使用,说改就改,说停就停。
浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 兜兜转转还是绕不开。不知为何特讨厌python。
b
beidapig
大约 4 年
11 楼
用 universal sentence encoder
s
silverhawk
大约 4 年
12 楼
先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果
好不好再工程化
另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直
接上模型不一定好
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我不熟DL,而且开发语言只能是Java。现在有个问题:
: 我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是 : BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使
用
: BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。
: 另外,运行环境的内存和性能都不是很友好。
: 谢谢
c
chebyshev
大约 4 年
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,一样会碰到很多问题。
【 在 sanwadie(三娃爹) 的大作中提到: 】
<br>: 更正一下,不是python,是整个 dl 届的不良风气。
<br>: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本
号差 0
<br>: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小
心了,
<br>: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。
训练个
模型,
<br>: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,
我用下
来,居
<br>: 然还是svm效果最好。
<br>: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得
对软件
工程多
<br>: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家
的东西
<br>: 得小心使用,说改就改,说停就停。
<br>: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
<br>
s
sanwadie
大约 4 年
14 楼
去看了一下,有小模型,准备以后尝试一下。谢谢
【 在 beidapig (做人要谦虚) 的大作中提到: 】
: 用 universal sentence encoder
s
sanwadie
大约 4 年
15 楼
已经有 web service 版本的应用,虽然比不上外边的专业产品,但够用了。最近公司
的设备遇到了弱网问题,我寻思着是否可以把一部分功能放到前端去。之前的软件都是模块化的,出于部署考虑,所有模块实现了远程/本地调用切换。所以我在考虑,在弱
网时,使用一个弱化版的嵌入式对话机器人,一旦网络通畅,就自动切换回去。这个就是使用场景。
我现在打算先用分类算法将就一下,等以后有时间再考虑一下其他。
【 在 silverhawk (silverhawk) 的大作中提到: 】
: 先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果
: 好不好再工程化
: 另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直
: 接上模型不一定好
: 用
s
sanwadie
大约 4 年
16 楼
感谢回复。
我平时开发不多,关心部件之间的调用接口,rest api 规范要远多过内部实现代码。
很多时候,哪怕看到屎一样的代码,只要逻辑上没大问题,性能上不太离谱
都捏鼻子认了。
小公司求短平快。我原来打算用ALBERT+Cosine Distance,结果出来不行,就想看看能否自己调整一下,现在看来太复杂,目前已经放弃。
【 在 chebyshev (......) 的大作中提到: 】
: 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,: cpp,python过硬。
: 假如自己实现的话,哪怕就是DOT,norm,你的效率和质量要赶上fortran,cpp,python那
: 也很废功夫的。这样写出来你自己不就成了你批评的那些库嘛!
: 我建议用python的numpy.。绕过基础线性代数操作自己写这个坑。可以在numpy的基础
: 上写别的算法。
: Overall来讲,把数值计算的算法在web server host起来,远不是一般人想象的那么简
: 单。half
: made的各种软件的出现很正常。这个倒不是dl届的问题。这是cs的人很少学
numerical
: computation 的问题,传统上这块归EE,ME,化学,生物什么的。跟java不是一套班
子。
: ...................
s
sanwadie
大约 4 年
17 楼
我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则是尽量少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候,引入的包还
有根据需要重新打包。
【 在 chebyshev (......) 的大作中提到: 】
: 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有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
chebyshev
大约 4 年
18 楼
嵌入设备(有条件的话)我觉得c/cpp有优势。
【 在 sanwadie(三娃爹) 的大作中提到: 】
<br>: 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则
是尽量
<br>: 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候
,引入
的包还
<br>: 有根据需要重新打包。
<br>: numerical
<br>: 子。
<br>
s
sanwadie
大约 4 年
19 楼
上次用c是2005之前,也是嵌入系统。如今都安卓嵌入系统。老了,智商不够,拾起来
难了。
【 在 chebyshev (......) 的大作中提到: 】
: 嵌入设备(有条件的话)我觉得c/cpp有优势。
:
: 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我
: 的原则
: 是尽量
:
: 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候
: ,引入
: 的包还
:
: 有根据需要重新打包。
:
: numerical
:
: 子。
: ...................
b
beidapig
大约 4 年
20 楼
tf的productinization
server端的model用 model server host
mobile端转化成tflite 格式,tflite不支持所有operation 比如文本模型常用的
sparse。不是所有模式都能转化
m
magliner
大约 4 年
21 楼
请问大神为啥svm好 ? 能比线性回归好很多吗 ?
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
s
sanwadie
大约 4 年
22 楼
我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实际使用时感觉不到。
【 在 magliner (magliner) 的大作中提到: 】
: 请问大神为啥svm好 ? 能比线性回归好很多吗 ?
: 0
m
magliner
大约 4 年
23 楼
看来大神在线答疑。
svm这个东西, 我觉着很多做生物统计的特别喜欢,什么原因不知道。 我做的东西比
较简单,经常和普通线性回归比较下,大部分情况性能差不多,但svm很多R软件包调用起来不方便, 比如kernel这个参数,理论上应该有好几种, 圆的,方的(是不是有三角的我是记不清了),有的作者也许图省事,只提供⚪的, radius, 是不是很别扭。 而且其他几个参数, 也完全没有章法可循,从0到无穷大,让人怎么选?
从零到一,或者从一到一万选个最优解,还能试一试。 无穷大, 哪里是个尽头。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实
: 际使用时感觉不到。
S
Shane2014
大约 4 年
24 楼
https://github.com/UKPLab/sentence-transformers
I have tried this, beats USE from google.
w
wdong
大约 4 年
25 楼
我不信他们内部项目也这么倒腾。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
: ...................
s
sanwadie
大约 4 年
26 楼
谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。
但还是太大。以后替换服务器端的服务会考虑。
【 在 Shane2014 (Shane2014) 的大作中提到: 】
: https://github.com/UKPLab/sentence-transformers
: I have tried this, beats USE from google.
s
sanwadie
大约 4 年
27 楼
pytorch 感觉比 tf 正规多了。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。
: 但还是太大。以后替换服务器端的服务会考虑。
s
sanwadie
大约 4 年
28 楼
我了解到部门,都不是这样。但是谷歌开源出来的东西,都不太尊重开发者。有很长一串东西,比如GWT(现在谁还在用,TM我就上过贼船),比如guava,内部一些东西改动太大,TF就更不用说了。
【 在 wdong (万事休) 的大作中提到: 】
: 我不信他们内部项目也这么倒腾。
: 0
w
walkrandom
大约 4 年
29 楼
以后换人换项目
都是重写不是重构
Python重写快
这是优点
s
sanwadie
大约 4 年
30 楼
再次感谢各位的帮助。
感谢 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
xiaoju
大约 4 年
31 楼
pytorch不错
keras被谷歌搞死前也不错
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
x
xiaoju
大约 4 年
32 楼
一般来说内部项目只会更折腾,不然那么多人干什么啊
【 在 wdong (万事休) 的大作中提到: 】
: 我不信他们内部项目也这么倒腾。
: 0
n
newIdRobot
大约 4 年
33 楼
可以试试java native interface 矩阵运算用c++完成
【在 chebyshev(......)的大作中提到:】
:线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,:cpp,python过硬。
请输入帖子链接
收藏帖子
我不熟DL,而且开发语言只能是Java。现在有个问题:
我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是
BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使用 BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。
另外,运行环境的内存和性能都不是很友好。
谢谢
得看你是不是有label好得数据,有的话直接训练;没有的话没什么好办法,搜一下
sentence embedding吧
try:
cosine distance
KL distance
should be enough
【 在 timetodo (time2do) 的大作中提到: 】
: try:
: cosine distance
: KL distance
: should be enough
感谢 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 之类简单矩阵运算组合,我打算自己
实现。
我在网上找到相关例子,需要对模型进行fine tuning,然后才能用来产生可用的
sentence embedding。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 感谢 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,而且资源有限,无法使用很多现成的库,必须自己实现某些
: 矩阵算法。
: ...................
不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来
算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用
来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现相似度都很高。
具体你可以参考这里的结果https://www.zhihu.com/question/354129879
总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 感谢 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,而且资源有限,无法使用很多现成的库,必须自己实现某些
: 矩阵算法。
: ...................
【 在 cotx (Inter Milan!) 的大作中提到: 】
: 不是,我得意思是你有没有一些数据用来训练similarity的?如果直接拿CLS token来
: 算similarity的话结果会很差,不管用什么距离都一样。原因是BERT的cls token只用
: 来算下一个句子是不是临街的,所以这个向量基本只有两个方向,你算一下的话会发现
: 相似度都很高。
: 具体你可以参考这里的结果
: https://www.zhihu.com/question/354129879
: 总结一下就是没有数据训练,只做无监督的话,直接用glove就行了,bert没用。
再次感谢指点。我暂时没有训练数据。word2vec/glove模型太大,我这里不适合使用。我在想是否有通用的fine tuning,不需要训练数据就可以对输出进行 cosine
similarity 计算。当然fine tuning 不能太复杂,否则我还要实现全部相关的运算。
还是得用Python
把数据传回java即可
兜兜转转还是绕不开。不知为何特讨厌python。
【 在 walkrandom (walkrandom) 的大作中提到: 】
: 还是得用Python
: 把数据传回java即可
更正一下,不是python,是整个 dl 届的不良风气。
我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0.0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
然还是svm效果最好。
这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西得小心使用,说改就改,说停就停。
浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 兜兜转转还是绕不开。不知为何特讨厌python。
用 universal sentence encoder
先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果
好不好再工程化
另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直
接上模型不一定好
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我不熟DL,而且开发语言只能是Java。现在有个问题:
: 我已经可以在Java里使用谷歌PreTrained BERT embedding,获取句子的向量。但是 : BERT 好像不能直接用来做 Sentence Similarity。有没有简单的数学介绍,如何使
用
: BERT 返回的数据,获取两个句子的相似度。我目前用java做了DOT 和NORM的算法。
: 另外,运行环境的内存和性能都不是很友好。
: 谢谢
线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有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,一样会碰到很多问题。
【 在 sanwadie(三娃爹) 的大作中提到: 】
<br>: 更正一下,不是python,是整个 dl 届的不良风气。
<br>: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本
号差 0
<br>: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小
心了,
<br>: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。
训练个
模型,
<br>: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,
我用下
来,居
<br>: 然还是svm效果最好。
<br>: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得
对软件
工程多
<br>: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家
的东西
<br>: 得小心使用,说改就改,说停就停。
<br>: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
<br>
去看了一下,有小模型,准备以后尝试一下。谢谢
【 在 beidapig (做人要谦虚) 的大作中提到: 】
: 用 universal sentence encoder
已经有 web service 版本的应用,虽然比不上外边的专业产品,但够用了。最近公司
的设备遇到了弱网问题,我寻思着是否可以把一部分功能放到前端去。之前的软件都是模块化的,出于部署考虑,所有模块实现了远程/本地调用切换。所以我在考虑,在弱
网时,使用一个弱化版的嵌入式对话机器人,一旦网络通畅,就自动切换回去。这个就是使用场景。
我现在打算先用分类算法将就一下,等以后有时间再考虑一下其他。
【 在 silverhawk (silverhawk) 的大作中提到: 】
: 先试一下能不能直接用: https://github.com/hanxiao/bert-as-service,看看效果
: 好不好再工程化
: 另外句子相似性可能需要前期处理很多,比如normalization,甚至tokenization,直
: 接上模型不一定好
: 用
感谢回复。
我平时开发不多,关心部件之间的调用接口,rest api 规范要远多过内部实现代码。
很多时候,哪怕看到屎一样的代码,只要逻辑上没大问题,性能上不太离谱
都捏鼻子认了。
小公司求短平快。我原来打算用ALBERT+Cosine Distance,结果出来不行,就想看看能否自己调整一下,现在看来太复杂,目前已经放弃。
【 在 chebyshev (......) 的大作中提到: 】
: 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,: cpp,python过硬。
: 假如自己实现的话,哪怕就是DOT,norm,你的效率和质量要赶上fortran,cpp,python那
: 也很废功夫的。这样写出来你自己不就成了你批评的那些库嘛!
: 我建议用python的numpy.。绕过基础线性代数操作自己写这个坑。可以在numpy的基础
: 上写别的算法。
: Overall来讲,把数值计算的算法在web server host起来,远不是一般人想象的那么简
: 单。half
: made的各种软件的出现很正常。这个倒不是dl届的问题。这是cs的人很少学
numerical
: computation 的问题,传统上这块归EE,ME,化学,生物什么的。跟java不是一套班
子。
: ...................
我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则是尽量少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候,引入的包还
有根据需要重新打包。
【 在 chebyshev (......) 的大作中提到: 】
: 线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有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/cpp有优势。
【 在 sanwadie(三娃爹) 的大作中提到: 】
<br>: 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我的原则
是尽量
<br>: 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候
,引入
的包还
<br>: 有根据需要重新打包。
<br>: numerical
<br>: 子。
<br>
上次用c是2005之前,也是嵌入系统。如今都安卓嵌入系统。老了,智商不够,拾起来
难了。
【 在 chebyshev (......) 的大作中提到: 】
: 嵌入设备(有条件的话)我觉得c/cpp有优势。
:
: 我用在嵌入设备里,如果太复杂,就准备引入一个包,否则就自己写。我
: 的原则
: 是尽量
:
: 少用第三方的包,尤其是只用一两个方法,却要几十个M的包。很多时候
: ,引入
: 的包还
:
: 有根据需要重新打包。
:
: numerical
:
: 子。
: ...................
tf的productinization
server端的model用 model server host
mobile端转化成tflite 格式,tflite不支持所有operation 比如文本模型常用的
sparse。不是所有模式都能转化
请问大神为啥svm好 ? 能比线性回归好很多吗 ?
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实际使用时感觉不到。
【 在 magliner (magliner) 的大作中提到: 】
: 请问大神为啥svm好 ? 能比线性回归好很多吗 ?
: 0
看来大神在线答疑。
svm这个东西, 我觉着很多做生物统计的特别喜欢,什么原因不知道。 我做的东西比
较简单,经常和普通线性回归比较下,大部分情况性能差不多,但svm很多R软件包调用起来不方便, 比如kernel这个参数,理论上应该有好几种, 圆的,方的(是不是有三角的我是记不清了),有的作者也许图省事,只提供⚪的, radius, 是不是很别扭。 而且其他几个参数, 也完全没有章法可循,从0到无穷大,让人怎么选?
从零到一,或者从一到一万选个最优解,还能试一试。 无穷大, 哪里是个尽头。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我是苦力,不是大神。使用下来感觉准确率略高。其实差别不大,不仔细测试,实际实
: 际使用时感觉不到。
I have tried this, beats USE from google.
我不信他们内部项目也这么倒腾。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
: ...................
谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。
但还是太大。以后替换服务器端的服务会考虑。
【 在 Shane2014 (Shane2014) 的大作中提到: 】
: https://github.com/UKPLab/sentence-transformers
: I have tried this, beats USE from google.
pytorch 感觉比 tf 正规多了。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 谢谢,尝试了一下,感觉不错,尤其后边的Semantic Search几乎开箱可用。
: 但还是太大。以后替换服务器端的服务会考虑。
我了解到部门,都不是这样。但是谷歌开源出来的东西,都不太尊重开发者。有很长一串东西,比如GWT(现在谁还在用,TM我就上过贼船),比如guava,内部一些东西改动太大,TF就更不用说了。
【 在 wdong (万事休) 的大作中提到: 】
: 我不信他们内部项目也这么倒腾。
: 0
以后换人换项目
都是重写不是重构
Python重写快
这是优点
再次感谢各位的帮助。
感谢 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种语言。
pytorch不错
keras被谷歌搞死前也不错
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 更正一下,不是python,是整个 dl 届的不良风气。
: 我是做工程的,强调质量、软件一致性,可维护性等。看看他们搞的东西,版本号差 0
: .0.1,API就天差地别。github上的dl项目,尤其是基于tf的,超过2个月就要小心了,
: 按tutorial 做基本没戏。做个东西,全都留个尾巴,没法拿来直接用。训练个模型,
: TM 就是中餐馆厨师,全凭经验。吹得比做得好听,就拿文本分类来说,我用下来,居
: 然还是svm效果最好。
: 这股风气来自学术届,蔓延到工业界,狗家为甚。看看狗家的 tf,这得对软件工程多
: 么无知才会出这么sb的东西,几乎集中了全部软件工程的 anti-pattern 。狗家的东西
: 得小心使用,说改就改,说停就停。
: 浪费了几天时间,决定转回svm,和bert说再见。又一次狗家很差的体验。
一般来说内部项目只会更折腾,不然那么多人干什么啊
【 在 wdong (万事休) 的大作中提到: 】
: 我不信他们内部项目也这么倒腾。
: 0
可以试试java native interface 矩阵运算用c++完成
【在 chebyshev(......)的大作中提到:】
:线性代数的很多基础操作的实现有复杂的学问在里面。免费的库,目前只有fortran,:cpp,python过硬。