您好,欢迎来到刀刀网。
搜索
您的当前位置:首页大模型基础教程:词向量

大模型基础教程:词向量

来源:刀刀网

什么是词向量?

词向量(Word Embedding)是自然语言处理(NLP)中的一种技术,它将词语映射为实数向量空间中的点。这种映射捕获了词语的语义和上下文信息,使得每个词都可以用一个固定长度的向量来表示。词向量能够体现词语之间的相似性和关联性,例如,在向量空间中,语义相近的词其向量之间的距离也会比较近。

为什么要用词向量?

词向量如何区别于one-hot?

one-hot编码和词向量是自然语言处理中用于表示文本数据的两种常见方法,它们的主要区别在于:

  1. 稀疏性:one-hot编码非常稀疏,每个词对应一个长度为词表大小的向量,其中只有一个位置为1,其余为0。相比之下,词向量是稠密的,通常具有较低的维度,如100或300维。

  2. 语义信息:one-hot编码无法表达词之间的语义关系,每个词都是的。而词向量通过训练学习词的语义信息,使得语义相近的词在向量空间中距离较近。

  3. 可计算性:one-hot编码之间的运算复杂度高,而词向量之间可以进行计算,如计算相似度、进行向量运算等。

  4. 数据稀疏性:one-hot编码导致数据稀疏,而词向量可以缓解这一问题。

  5. 模型表达能力:使用词向量可以提高模型的表达能力,在许多NLP任务中取得更好的效果。

然而,词向量也存在一些问题,如需要大量数据进行训练,以及可能引入噪声等。尽管如此,词向量相比one-hot编码在NLP任务中更为常用,因为它们能够更好地表达词的语义信息。

怎么用词向量?

  1. 训练:首先需要对大量文本进行训练,以生成词向量。常用的训练方法包括Word2vec和GloVe等。

  2. 加载和使用:训练完成后,将得到的词向量加载到模型中,作为输入特征。

  3. 应用:在NLP任务中,如文本分类、情感分析、机器翻译等,使用这些词向量作为特征。

有哪些词向量的工具?

  1. Word2vec:由Google开源的工具,包括两种训练模型,连续词袋(CBOW)和Skip-Gram。

  2. GloVe:由斯坦福大学提出的全局向量(Global Vectors)模型,它基于统计方法来捕捉词语的语义信息。

  3. FastText:由 AI团队开发,不仅能够生成词向量,还能为句子和单词生成向量,并可用于文本分类。

  4. gensim:一个Python库,可以用来训练word2vec模型,并提供了丰富的API进行词向量的处理和分析。

这些工具都提供了丰富的接口,可以在不同的操作系统和环境中使用,帮助研究者和技术人员更好地处理自然语言数据。以下是使用不同词向量工具进行文本分类的简单案例。

1. Word2vec + Keras

步骤:
  1. 准备数据集。

  2. 训练Word2vec模型。

  3. 将文本转换为词向量序列。

  4. 建立一个神经网络模型。

  5. 训练分类器。

  6. 评估模型。

数据集:

假设我们有一个简单的数据集,其中包含文本和标签。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">corpus = [</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">"text of the first document"</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">"text of the second document"</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># ...</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">labels = [<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">0</span>, <span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">1</span>,  <span style="font-size: 12px;color: rgb(160, 161, 167);font-style: italic;line-height: 23px;"># ... 根据实际数据集</span></span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">]</span></td></tr></tbody></table>   `

python复制代码


实战代码:
`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> gensim.models <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> Word2Vec</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> keras.preprocessing.sequence <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> pad_sequences</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> keras.models <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> Sequential</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> keras.layers <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> Dense, Embedding, Flatten</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> keras.utils <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> to_categorical</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># Word2vec训练</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">sentences = [doc.split() <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> doc <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> corpus]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model = Word2Vec(sentences, vector_size=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">100</span>, window=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">5</span>, min_count=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">1</span>, workers=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">4</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 文本转换为词向量序列</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="12" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="12" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">def</span> <span style="font-size: 12px;color: rgb(, 120, 242);line-height: 23px;">doc_to_vector</span>(<span style="font-size: 12px;color: rgb(247, 205, 122);line-height: 23px;">doc</span>):</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="13" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="13" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">words = doc.split()</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="14" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="14" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">vectors = [model.wv[word] <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> word <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> words <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">if</span> word <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> model.wv]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="15" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="15" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">return</span> vectors</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="16" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="16" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="17" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="17" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 准备数据</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="18" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="18" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">vectors = [doc_to_vector(doc) <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> doc <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> corpus]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="19" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="19" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">vectors = pad_sequences(vectors, maxlen=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">100</span>, dtype=<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'float32'</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="20" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="20" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="21" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="21" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 建立分类模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="22" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="22" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model = Sequential()</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="23" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="23" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.add(Embedding(<span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">len</span>(model.wv.vocab), <span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">100</span>, input_length=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">100</span>, weights=[model.wv.vectors], trainable=<span style="font-size: 12px;color: rgb(1, 132, 187);line-height: 23px;">False</span>))</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="24" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="24" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.add(Flatten())</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="25" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="25" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.add(Dense(<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">256</span>, activation=<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'relu'</span>))</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="26" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="26" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.add(Dense(<span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">len</span>(<span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">set</span>(labels)), activation=<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'softmax'</span>))</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="27" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="27" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="28" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="28" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 训练模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="29" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="29" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.<span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">compile</span>(optimizer=<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'adam'</span>, loss=<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'categorical_crossentropy'</span>, metrics=[<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'accuracy'</span>])</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="30" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="30" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model.fit(vectors, to_categorical(labels), epochs=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">10</span>, batch_size=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">32</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="31" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="31" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="32" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="32" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 评估模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="33" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="33" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># ...</span></td></tr></tbody></table>   `

python复制代码


2. GloVe + Scikit-learn

步骤:
  1. 准备数据集。

  2. 使用GloVe训练词向量。

  3. 将文本转换为词向量平均值。

  4. 使用Scikit-learn建立分类器。

  5. 训练和评估模型。

实战代码:
`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> numpy <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">as</span> np</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> sklearn.feature_extraction.text <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> TfidfVectorizer</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> sklearn.model_selection <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> train_test_split</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> sklearn.linear_model <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> LogisticRegression</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">from</span> glove <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> Glove</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 假设已经通过GloVe训练了模型并保存了词向量</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 读取词向量</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">glove_model = Glove.load_stanford(<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'path_to_glove_model'</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">vectors = glove_model.word_vectors</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="12" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="12" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 将文本转换为词向量平均值</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="13" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="13" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">def</span> <span style="font-size: 12px;color: rgb(, 120, 242);line-height: 23px;">doc_to_vector</span>(<span style="font-size: 12px;color: rgb(247, 205, 122);line-height: 23px;">doc</span>):</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="14" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="14" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">words = doc.split()</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="15" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="15" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">vectors = [vectors[glove_model.dictionary[word]] <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> word <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> words <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">if</span> word <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> glove_model.dictionary]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="16" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="16" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">return</span> np.mean(vectors, axis=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">0</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="17" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="17" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="18" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="18" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 转换文本数据</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="19" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="19" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">X = [doc_to_vector(doc) <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> doc <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> corpus]</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="20" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="20" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">y = labels</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="21" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="21" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="22" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="22" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 分割数据集</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="23" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="23" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">0.2</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="24" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="24" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="25" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="25" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 建立分类器</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="26" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="26" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">logreg = LogisticRegression()</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="27" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="27" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">logreg.fit(X_train, y_train)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="28" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="28" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="29" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="29" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 评估模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="30" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="30" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">print</span>(logreg.score(X_test, y_test))</span></td></tr></tbody></table>   `

python复制代码


3. FastText + FastText

步骤:
  1. 准备数据集。

  2. 使用FastText训练词向量。

  3. 使用FastText库进行文本分类。

实战代码:
`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">import</span> fasttext</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 准备数据集</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">with</span> <span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">open</span>(<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'train.txt'</span>, <span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'w'</span>) <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">as</span> f:</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">for</span> doc, label <span style="font-size: 12px;color: rgb(166, 38, 1);line-height: 23px;">in</span> <span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">zip</span>(corpus, labels):</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">f.write(<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">f'__label__<span style="font-size: 12px;color: rgb(228, 86, 73);line-height: 23px;">{label}</span> <span style="font-size: 12px;color: rgb(228, 86, 73);line-height: 23px;">{doc}</span>\n'</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 训练模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">model = fasttext.train_supervised(<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'train.txt'</span>, dim=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">100</span>, epoch=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">10</span>, lr=<span style="font-size: 12px;color: rgb(152, 104, 1);line-height: 23px;">0.1</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 12px;"># 评估模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="12" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="12" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;">result = model.test(<span style="font-size: 12px;color: rgb(80, 161, 79);line-height: 23px;">'train.txt'</span>)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="13" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="13" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 12px;"><span style="font-size: 12px;color: rgb(193, 132, 1);line-height: 23px;">print</span>(result.precision, result.recall)</span></td></tr></tbody></table>   `

python复制代码


请注意,以上代码仅作为示例,实际使用时需要根据具体的数据集和任务进行调整。在实际项目中,您还需要处理数据清洗、参数调优、模型评估等多个方面。此外,FastText的代码假设您已经将数据格式化为FastText所需的格式,并且已经分割了训练集和测试集。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所用到实际当中去,这时候可以搞点实战案例来学习。

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务