<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>深度学习 归档 - Tinyfool的个人网站</title>
	<atom:link href="https://codechina.org/tag/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/feed/" rel="self" type="application/rss+xml" />
	<link>https://codechina.org/tag/深度学习/</link>
	<description></description>
	<lastBuildDate>Fri, 16 Dec 2022 02:33:49 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Standford CS224N-深度学习下的NLP学习笔记（不定期更新）</title>
		<link>https://codechina.org/2022/12/26295/</link>
					<comments>https://codechina.org/2022/12/26295/#respond</comments>
		
		<dc:creator><![CDATA[tinyfool]]></dc:creator>
		<pubDate>Fri, 16 Dec 2022 02:33:20 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[nlp]]></category>
		<category><![CDATA[深度学习]]></category>
		<guid isPermaLink="false">https://codechina.org/?p=26295</guid>

					<description><![CDATA[<p>课程视频地址 https://www.youtube.com/watch?v=rmVRLeJRkl4&#38; [&#8230;]</p>
<p><a href="https://codechina.org/2022/12/26295/">Standford CS224N-深度学习下的NLP学习笔记（不定期更新）</a>最先出现在<a href="https://codechina.org">Tinyfool的个人网站</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>课程视频地址 <a href="https://www.youtube.com/watch?v=rmVRLeJRkl4&amp;list=PLoROMvodv4rOSH4v6133s9LFPRHjEmbmJ">https://www.youtube.com/watch?v=rmVRLeJRkl4&amp;list=PLoROMvodv4rOSH4v6133s9LFPRHjEmbmJ</a></p>



<h2 class="wp-block-heading">什么是NLP?</h2>



<p>NLP就是自然语言处理<em>natural language processing</em>，基本上解决的就是计算机怎么理解人类语言的问题，实际应用中包括文本胜场，文本分类，机器翻译，甚至最近很火的<a href="https://codechina.org/tag/chatgpt/">ChatGPT</a>等等需求都是由NLP完成的。</p>



<span id="more-26295"></span>



<p>我在深度学习兴起前后，比较系统的学过NLP，比较传统的中文的NLP问题是刚才那些问题加上一个分词问题。我以前做过搜索服务，分词是我们很关心的问题。</p>



<p>Word2vec火起来的时候，我已经没怎么玩NLP了。</p>



<p>最近又开始有兴趣重新学在深度学习下的NLP，主要是由ChatGPT的大火以及它目前达到的水平造成的。</p>



<h2 class="wp-block-heading">第一课主要是介绍了Word Vectors的概念。</h2>



<p>我印象最深刻的是老师引用的，John Rupert Firth的一句话，他是，英国语言学家，伦敦学派创始人。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>You shall know a word by the company it keeps.</p>
<cite>John Rupert Firth 1957:11</cite></blockquote>



<p>这句话的意思是说，了解一个词应该看它和什么其他的词一起出现。换句话说，就是了解一个词要看它的上下文，它经常出现的上下文。</p>



<p>其实传统的NLP也是把一个词当作一个向量来处理的，但是这是一个稀疏的向量，比如我有1万篇语料，那么我们就把买个词表示成一个1万维的向量，每一维是0还是1，视这个词是否出现在这个语料里决定。</p>



<p>比如，下面的表示就代表，motel出现在了第11个语料，而hotel出现在第9个语料里。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="842" height="174" src="https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-15-23.28.14.png" alt="" class="wp-image-26296" srcset="https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-15-23.28.14.png 842w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-15-23.28.14-300x62.png 300w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-15-23.28.14-768x159.png 768w" sizes="(max-width: 842px) 100vw, 842px" /></figure>



<p>这样的方法其实解决了很多传统思路下的NLP问题。</p>



<p>但是深度学习下的NLP的开始是把一个词的含义用它前后出现的词来理解，形成Word Vectors。就像John Rupert Firth说的那样。</p>



<p>John Rupert Firth说的这句话是在1957年，但是最近几年，Word Vectors、深度学习才真的能把这样的认识变成计算机的数据机构，变成可以计算的东西。这让我想到，我们可以有很多灵感，但是这些东西是否能给人类带来贡献，需要科技到达某个水平去把我们的灵感变成现实，或者释放出巨大的能量，或者干脆告诉我们这些根本就是错的。光有这些灵感并无用。</p>



<p>另外John Rupert Firth的这句话，我认为跟<a href="https://www.youtube.com/@tinyEnglish">我倡导的学习语言的理念其实也很接近</a>。你背单词，你背词典的解释，其实是一种机械的对词语的理解。事实上，我们对母语的大多数词汇的理解，都是在使用中，在它的使用场景中理解的。我们有时候可以不知道一个词在词典中的确切意思，但是因为它每每都出现在某个上下文里面，我们就可以自然的获得对这个词汇的理解。</p>



<h2 class="wp-block-heading">代码</h2>



<p>老师提供了如下的Python代码，</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import numpy as np

%matplotlib inline
import matplotlib as plt
plt.style.use('ggplot')

from sklearn.decomposition import PCA

import gensim.downloader as api
from gensim.models import KeyedVectors

model = api.load("glove-wiki-gigaword-100")</code></pre>



<p>这个代码，使用了Gensim（1）。Gensim并不是深度学习哭，但是包含了word vector的实现。数据用了<a href="https://nlp.stanford.edu/projects/glove/">斯坦福自己的GloVe</a>（2）的word vector数据。</p>



<p>加载了model以后，就可以用model来观察和研究词之间的关系。比较简单的，我们可以看跟面包关系比较紧密的东西有什么：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">model.most_similar(["bread"]

[('flour', 0.7654520869255066),
 ('baked', 0.7607272863388062),
 ('cake', 0.7605516910552979),
 ('loaf', 0.7457114458084106),
 ('toast', 0.7397798895835876),
 ('cheese', 0.7374635338783264),
 ('potato', 0.7367483973503113),
 ('butter', 0.7279618978500366),
 ('potatoes', 0.7085272669792175),
 ('pasta', 0.7071877717971802)]</code></pre>



<p>输出的这些词分别是flour &#8211; 面粉， baked &#8211; 烘焙， cake &#8211; 蛋糕 loaf &#8211; 一条面包， toast &#8211; 烤面包， cheese &#8211; 奶酪， potato &#8211; 土豆， butter &#8211; 黄油， potatoes &#8211; 土豆， pasta &#8211; 面条。</p>



<p>我们也可以看跟coffee关系紧密的是什么：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">model.most_similar(["coffee"]

[('tea', 0.77326899766922),
 ('drinks', 0.7287518978118896),
 ('beer', 0.7253385186195374),
 ('cocoa', 0.7026591300964355),
 ('wine', 0.7002726793289185),
 ('drink', 0.6990923881530762),
 ('corn', 0.6825440526008606),
 ('sugar', 0.6775094270706177),
 ('bread', 0.6727856993675232),
 ('fruit', 0.667149007320404)]</code></pre>



<p>但是，因为这些都是word vector词向量，向量是可以进行运算的，在空间上加减可以得到很有意思的结果。下图的例子是</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="560" src="https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34-1024x560.png" alt="" class="wp-image-26312" srcset="https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34-1024x560.png 1024w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34-300x164.png 300w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34-768x420.png 768w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34-1200x656.png 1200w, https://codechina.org/wp-content/uploads/2022/12/截屏2022-12-16-09.39.34.png 1266w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>我们知道king的向量和man的向量有关系，如果我们把king的向量减去一个man得到了一个新的起点，然后加上一个woman，结果就可能会得到gueen的结果。代码如下：</p>



<pre class="wp-block-code"><code lang="python" class="language-python">model.most_similar(positive=["king","woman"],negative=["man"])

[('queen', 0.7698541283607483),
 ('monarch', 0.6843380331993103),
 ('throne', 0.6755736470222473),
 ('daughter', 0.6594556570053101),
 ('princess', 0.6520534157752991),
 ('prince', 0.6517034769058228),
 ('elizabeth', 0.6464518308639526),
 ('mother', 0.631171703338623),
 ('emperor', 0.6106470823287964),
 ('wife', 0.6098655462265015)]</code></pre>



<p>most_similar的positive参数里面放上两个词，king和woman等于这两个向量相加，negative放入man，等于在结果向量减去man。结果第一个就是queen。</p>



<p>类似的研究或者游戏，我们可以继续做，都很好玩。</p>



<pre title="coffee+中国，减去美国，得到了第一个结果是tea。" class="wp-block-code"><code lang="python" class="language-python">model.most_similar(positive=["coffee","china"],negative=["usa"])

[('tea', 0.6365849375724792),
 ('fruit', 0.6253646016120911),
 ('chinese', 0.5799036622047424),
 ('food', 0.5783675312995911),
 ('grain', 0.577540397644043),
 ('vegetables', 0.5578237771987915),
 ('prices', 0.5492344498634338),
 ('fruits', 0.5417575836181641),
 ('export', 0.5401189923286438),
 ('vegetable', 0.5384897589683533)]</code></pre>



<pre title="King+china减去england，得到了加一秒，第一行的jiang和倒数第二行的zemin" class="wp-block-code"><code lang="python" class="language-python">model.most_similar(positive=["king","china"],negative=["england"])

[('jiang', 0.6718781590461731),
 ('chinese', 0.657663106918335),
 ('wu', 0.6562906503677368),
 ('li', 0.6415701508522034),
 ('zhu', 0.6260422468185425),
 ('liu', 0.6097914576530457),
 ('beijing', 0.6078009605407715),
 ('qin', 0.6032587289810181),
 ('zemin', 0.6009712815284729),
 ('chen', 0.5993086099624634)]</code></pre>



<pre title="president+china减去usa，得到了加一秒，不折腾" class="wp-block-code"><code lang="python" class="language-python">model.most_similar(positive=["president","china"],negative=["usa"])

[('jiang', 0.7173388600349426),
 ('hu', 0.7164437770843506),
 ('government', 0.6859283447265625),
 ('jintao', 0.6816513538360596),
 ('zemin', 0.6663808822631836),
 ('chinese', 0.6555445194244385),
 ('chen', 0.6504189372062683),
 ('beijing', 0.6466312408447266),
 ('taiwan', 0.627478837966919),
 ('administration', 0.6196395754814148)]</code></pre>



<p></p>



<p><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-secondary-color">Notes：</mark></strong></p>



<ol class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-secondary-color">Gensim是一个用于自然语言处理（NLP）的开源 Python 库。它提供了用于文本相似性分析、主题模型、文本转化和聚类的工具。Gensim 借鉴了许多有效的 NLP 技术，包括 Latent Semantic Analysis（LSA）、Latent Dirichlet Allocation（LDA）和 Random Projections（RP）。<br><br>Gensim 的目标是为用户提供一个简单易用的工具，帮助用户在文本数据上执行高效的 NLP 任务。 Gensim 使用简单的命令行界面，使用户可以轻松地处理大型文本集合，并使用少量的代码实现复杂的 NLP 任务。</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-secondary-color">GloVe（Global Vectors for Word Representation）是一种用于词嵌入（word embedding）的技术。它通过在语料库中统计每个单词和其他单词的共现次数，然后通过最小二乘法将单词映射到低维空间的向量（即词嵌入）的过程来工作。<br>GloVe的优势在于它能够保留单词之间的关系，这使得它很适合用于自然语言处理（NLP）任务，例如文本分类、机器翻译等。它也比较通用，能够应用于多种语言，并且计算效率高。GloVe是一种流行的词嵌入技术，并且已经被广泛应用于自然语言处理领域。它能够提供有效且较为通用的词嵌入，是许多自然语言处理系统的首选。</mark></li>
</ol>
<p><a href="https://codechina.org/2022/12/26295/">Standford CS224N-深度学习下的NLP学习笔记（不定期更新）</a>最先出现在<a href="https://codechina.org">Tinyfool的个人网站</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://codechina.org/2022/12/26295/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://codechina.org/wp-content/uploads/2022/12/r2d2-robot-read-book.png" medium="image" />
	</item>
	</channel>
</rss>
