我已经使用word2vec从大型文档中生成了标记列表的向量。给定一个句子,可以从句子中标记的向量中获取句子的向量。
Answers:
有不同的方法来获取句子向量:
有几种获取句子向量的方法。每种方法都有优点和缺点。选择一个取决于要对向量执行的任务。
首先,您可以简单地对word2vec中的向量进行平均。根据Le和Mikolov的说法,这种方法在情感分析任务上的效果很差,因为它“失去了与标准单词袋模型相同的单词顺序”,并且“无法识别许多复杂的语言现象,例如讽刺”。另一方面,根据Kenter等人的说法。2016年,“证明对文本中的所有单词进行简单的单词嵌入平均已被证明是跨多个任务的强大基线或功能”,例如短文本相似性任务。一种变体是用其TF-IDF加权单词向量,以减少最常见单词的影响。
Socher等人开发的一种更复杂的方法。使用矩阵向量运算,按照句子的语法树给出的顺序组合词向量。该方法适用于句子情感分析,因为它依赖于分析。
有可能,但不是来自word2vec。为了获得句子(以及段落和文档)的更高级别表示,单词向量的组合是一个非常活跃的研究主题。没有最佳的解决方案来执行此操作,它实际上取决于要应用这些向量的任务。您可以尝试级联,简单求和,逐点乘法,卷积等。您可以从中学习一些出版物,但是最终您只需要进行试验并查看最适合的出版物。
这取决于用法:
1)如果您只想获取某些已知数据的句子向量。在以下文件中查看段落向量:
Quoc V. Le和Tomas Mikolov。2014。句子和文档的分布式表示。Eprint Arxiv,4:1188-1196。
AM Dai,C.Olah和QV Le。2015年。与段落向量的DocumentEmbedding。ArXiv电子版,七月。
2)如果您希望模型使用无监督方法来估计未知(测试)句子的句子向量:
您可以查看这篇文章:
史蒂文·杜和张曦 2016。Aicyber在SemEval-2016任务4:基于i-vector的句子表示。在第十届国际语义评估研讨会(SemEval 2016)的会议记录中,美国圣地亚哥
3)研究人员也在寻找RNN或LSTM网络中特定层的输出,最近的例子是:
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4)对于gensim doc2vec,许多研究者未能克服此问题,因此未能获得良好的结果,随后论文基于预先训练的词向量使用doc2vec。
Jey Lau Lau和Timothy Baldwin(2016)。对doc2vec的经验评估,并具有对文档嵌入生成的实用见解。在第一届NLP代表性学习研讨会论文集中,2016。
Facebook拥有SentEval项目,用于评估句子向量的质量。
https://github.com/facebookresearch/SentEval
6)以下文件中有更多信息:
用于释义识别,语义文本相似性,自然语言推理和问题回答的神经网络模型
现在,您可以使用“ BERT”:
Google发布了源代码以及预训练的模型。
https://github.com/google-research/bert
这是一个将bert作为服务运行的示例:
您可以在训练阶段获得句子的矢量表示(将测试和句子训练在一个文件中,并运行从以下链接获取的word2vec代码)。
Tomas Mikolov在此处共享了句子2vec的代码。它假定一行的第一个单词为句子ID。使用编译代码
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -funroll-loops
并使用运行它
./word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1
编辑
Gensim(开发版本)似乎具有一种推断新句子向量的方法。model.infer_vector(NewDocument)
在https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py中查看方法
Google的通用句子编码器嵌入是针对此问题的更新解决方案。它不使用Word2vec,但会产生竞争解决方案。
深度平均网络(DAN)可以提供句子嵌入,对单词二元语法进行平均并通过前馈深度神经网络(DNN)传递。
发现使用句子嵌入的转移学习由于保留了语义关系,因此往往胜过词级转移。
您无需从头开始训练,可以使用经过预先训练的DAN模型进行阅读(请检查Google Hub中的Universal Sentence Encoder模块)。