【发布时间】:2015-08-28 01:02:02
【问题描述】:
我们有将单词转换为向量的模型(例如 word2vec 模型)。是否存在将句子/文档转换为向量的类似模型,可能使用为单个单词学习的向量?
【问题讨论】:
-
@alvas,你能澄清你想要的答案吗?也许我可以帮忙。
-
@azarel,我只是在吸引人们对这篇文章的关注,如果有更多人回答,或许会发现一些不那么流行但很酷的方式将句子建模为向量跨度>
我们有将单词转换为向量的模型(例如 word2vec 模型)。是否存在将句子/文档转换为向量的类似模型,可能使用为单个单词学习的向量?
【问题讨论】:
希望您欢迎实施。我在转换电影情节进行分析时遇到了类似的问题,在尝试了许多其他解决方案之后,我坚持使用一种使我的工作更容易的实现。下面附上代码sn-p。
从following link. 安装“spaCy”
import spacy
nlp = spacy.load('en')
doc = nlp(YOUR_DOC_HERE)
vec = doc.vector
希望这会有所帮助。
【讨论】:
这一切都取决于:
如果您使用 Word2Vec 生成模型,您可以尝试:
或者你可以做一些人做的事情,即将文档中的所有内容词相加并除以内容词,例如https://github.com/alvations/oque/blob/master/o.py#L13(注意:第 17-18 行是为了减少噪音而进行的破解):
def sent_vectorizer(sent, model):
sent_vec = np.zeros(400)
numw = 0
for w in sent:
try:
sent_vec = np.add(sent_vec, model[w])
numw+=1
except:
pass
return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
【讨论】:
sent_vec / np.sqrt(sent_vec.dot(sent_vec))
有很多方法可以回答这个问题。答案取决于您对短语和句子的解释。
这些分布模型,例如word2vec提供每个单词的矢量表示,只能展示通常在与其他单词相关的窗口基础上下文中使用的单词。基于对语境词关系的解释,您可以将句子中所有单词的平均矢量作为句子的矢量表示。例如,在这句话中:
素食主义者吃蔬菜。
我们可以将规范化的矢量作为矢量表示:
问题是句子的组成性质。如果您使用上面的平均字向量,这两个句子具有相同的矢量表示:
蔬菜吃素食主义者。
通过语料库处理学习树结构的分布方式有很多研究。例如:Parsing With Compositional Vector Grammars。这个video还解释了这种方法。
我再次强调解释。这些句子矢量可能在您的申请中有自己的意义。例如,在@ 987654323的情绪分析中,他们正在寻求的含义是句子的正面/负面情绪。即使您发现一个句子的完美矢量表示,如果您无法判断真相(David Lewis“一般语义”1970),则存在哲学辩论,这些辩论不是句子的实际含义。这就是为什么有重点在计算机视觉上的作品(@ 987654324或@ 4987654325 @)。我的观点是它可以完全取决于您的应用和对向量的解释。
【讨论】:
现成的解决方案稍微少一些,但如果您有特定的事情要做,则在准确性方面可能很难被击败:
构建一个 RNN(使用 LSTM 或 GRU 存储单元,comparison here)并优化您尝试完成的实际任务的误差函数。你喂它你的句子,并训练它产生你想要的输出。输入句子后网络的激活是句子的表示(尽管您可能只关心网络输出)。
您可以将句子表示为 one-hot 编码字符序列、one-hot 编码词序列或词向量序列(例如 GloVe 或 word2vec)。如果您使用词向量,您可以继续反向传播到词向量,更新它们的权重,因此您还可以获得针对您正在执行的任务专门调整的自定义词向量。
【讨论】:
1) 跳过 gram 方法:paper here 和使用它的工具,google word2vec
2)使用LSTM-RNN形成句子的语义表示。
3) sentences and documents 的表示。本文介绍了段落向量。它基本上是一种无监督算法,可以从可变长度的文本片段(例如句子、段落和文档)中学习固定长度的特征表示。
4) 虽然这个paper 不构成句子/段落向量,但它很简单。只需插入单个词向量(Glove word vectors 的性能最好),然后可以形成整个句子/段落的向量表示。
【讨论】: