Word2Vec 是仅用于句子中的单词还是也用于特征?

Word2Vec is it for word only in a sentence or for features as well?

想请教更多关于Word2Vec的问题:

我目前正在尝试构建一个程序来检查句子的嵌入向量。同时,我还使用sci-kit学习构建了一个特征提取,从句子中提取引理0、引理1、引理2。

据我了解;

1) 特征提取:引理 0、引理 1、引理 2 2) Word embedding:向量嵌入到每个字符中(这个可以使用gensim word2vec实现(我试过了))

更多说明:

句子="I have a pen"。 单词 = 句子的标记,例如 "have"

1) 特征提取

"I have a pen" --> lemma 0:I, lemma_1: 有, lemma_2:a....... lemma 0:have, lemma_1: a, lemma_2:pen 等等..然后当尝试使用 one_hot 提取特征时将产生:

[[0,0,1],
[1,0,0],
[0,1,0]]

2) 词嵌入(Word2vec)

"I have a pen" ---> "I", "have", "a", "pen"(标记化)然后来自 gensim 的 word2vec 将生成矩阵,例如使用 window_size = 2 产生:

[[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345],
[0.31235,0.31345]
]

浮点数和整数用于解释目的,原始数据应因句子而异。这些只是用来解释的虚拟数据。*

问题:

1) 我对Word2Vec 的理解正确吗?如果是,特征提取和word2vec有什么区别? 2)我很好奇我是否也可以使用 word2vec 来获得特征提取嵌入,因为根据我的理解,word2vec 只是为每个单词而不是为特征找到嵌入。

希望有人能帮助我。

不太清楚你在问什么,因为你似乎把很多概念混在一起了。 (Word2Vec 给出每个词的向量,而不是字符;词嵌入是一种词的特征提取,而不是 'feature extraction' 的替代方法;等等。所以:我怀疑你的理解是否正确。)

"Feature extraction" 是一个非常笼统的术语,表示获取原始数据(例如句子)并创建适用于其他类型的计算或下游机器学习的数字表示的所有方式。

将句子语料库转换为数字数据的一种简单方法是使用 "one-hot" 编码每个句子中出现的单词。例如,如果您有两个句子...

['A', 'pen', 'will', 'need', 'ink']
['I', 'have', 'a', 'pen']

...那么你有 7 个独特的大小写扁平词...

['a', 'pen', 'will', 'need', 'ink', 'i', 'have']

...您可以 "one-hot" 这两个句子中包含的每个单词的 1 或 0,从而获得 7 维向量:

 [1, 1, 1, 1, 1, 0, 0]  # A pen will need ink
 [1, 1, 0, 0, 0, 1, 1]  # I have a pen

即使使用这种简单的编码,您现在也可以在数学上比较句子:这两个向量之间的欧几里得距离或余弦距离计算将为您提供一个汇总距离数,没有共享词的句子将具有较高的 'distance',分享词多的人会小'distance'。

这些句子的其他非常相似的可能替代特征编码可能涉及每个单词的计数(如果一个单词出现不止一次,可能会出现大于 1 的数字),或加权计数(其中单词通过某种度量获得额外的显着性因子,例如常见的 "TF/IDF" 计算,因此值缩放为从 0.0 到高于 1.0 的任何值)。

请注意,您不能将单个句子编码为与它自己的单词一样宽的向量,例如 "I have a pen" 到 4 维 [1, 1, 1, 1] 向量中。那是无法与任何其他句子相提并论的。它们都需要转换为相同维度大小的向量,并且在 "one hot"(或其他简单的 "bag of words")编码中,该向量的维数等于 总词汇量 知乎诸句。

Word2Vec 是一种将单个单词转换为 "dense" 嵌入的方法,其维度较少但这些维度中有许多非零浮点值。这不是稀疏嵌入,它有许多维度大多为零。 'pen' 的 7 维稀疏嵌入单独从上面看就是:

[0, 1, 0, 0, 0, 0, 0]  # 'pen'

如果你训练了一个二维 Word2Vec 模型,它可能有一个像这样的密集嵌入:

[0.236, -0.711]  # 'pen'

这 7 个词都有自己的二维密集嵌入。例如(所有值组成):

[-0.101, 0.271]   # 'a'
[0.236, -0.711]   # 'pen'
[0.302, 0.293]    # 'will'
[0.672, -0.026]   # 'need'
[-0.198, -0.203]  # 'ink'
[0.734, -0.345]   # 'i'
[0.288, -0.549]   # 'have'

如果您有 Word2Vec 个向量,那么另一种为较长文本(如句子)制作向量的简单方法是对句子中单词的所有词向量进行平均。因此,不是句子的 7 维稀疏向量,如:

[1, 1, 0, 0, 0, 1, 1]  # I have a pen

...你会得到一个单一的二维密集向量,如:

[ 0.28925, -0.3335 ]  # I have a pen

再次,基于这些密集嵌入特征,不同的句子可以按距离相互比较。或者这些可能会很好地用作下游机器学习过程的训练数据。

因此,这是 "feature extraction" 的一种形式,它使用 Word2Vec 而不是简单的字数统计。还有许多其他更复杂的方法可以将文本转换为矢量;它们都可以算作 "feature extraction" 的种类。

哪种方式最适合您的需求将取决于您的数据和最终目标。通常最简单的技术效果最好,尤其是当您拥有大量数据时。但是几乎没有绝对的确定性,您通常需要尝试许多备选方案,并测试它们在一些定量的、可重复的评分评估中的表现如何,以找到最适合您的项目的方案。