斯坦福cs224d(深度学习在自然语言处理上的应用)Lecture 2

本文介绍了词向量的各种表示方法,包括使用语义词典、one-hot表示、基于分布相似性的表示等,并详细探讨了word2vec和GloVe两种主流词向量模型的工作原理及其优缺点。

以下是第二讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。

如何来表示一个词的意思(meaning)

  • 英文单词Meaning的定义(来自于韦氏词典)
    • the idea that is represented by a word, phrase, etc.
    • the idea that a person wants to express by using words, signs, etc.
    • the idea that is expressed in a work of writing, art, etc.

    在计算机中如何表示一个词的意思

    • 通常使用类似Wordnet的这样的语义词典,包含有上位词(is-a)关系和同义词集
    • panda的上位词,来自于NLTK中wordnet接口的演示

      NLTK-wordnet

    • good的同义词集

      good-同义词集

    语义词典存在的问题

    • 语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced, proficient,skillful?
    • 会错过一些新词,几乎不可能做到及时更新: wicked, badass, nifty, crack, ace, wizard, genius, ninjia
    • 有一定的主观倾向
    • 需要大量的人力物力
    • 很难用来计算两个词语的相似度

    One-hot Representation

    • 传统的基于规则或基于统计的自然语义处理方法将单词看作一个原子符号:hotel, conference, walk
    • 在向量空间的范畴里,这是一个1很多0的向量表示:[0,0,0,0,…,0,1,0,…,0,0,0]
    • 维数:20K(speech)–50K(PTB)–500K(big vocab)–13M(Google 1T)
    • 这就是”one-hot”表示,这种表示方法存在一个重要的问题就是“词汇鸿沟”现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系:

      屏幕快照 2015-05-26 下午8.55.45

    Distributional similarity based representations

    • 通过一个词语的上下文可以学到这个词语的很多知识

      屏幕快照 2015-05-26 下午9.09.38

    • 这是现代统计NLP很成功的一个观点

      屏幕快照 2015-05-26 下午9.10.15

    如何使用上下文来表示单词

    • 答案:使用共现矩阵(Cooccurrence matrix)X
      • 2个选择:全文还是窗口长度
      • word-document的共现矩阵最终会得到泛化的主题(例如体育类词汇会有相似的标记),这就是浅层语义分析(LSA, Latent Semantic Analysis)
      • 窗口长度容易捕获语法(POS)和语义信息

    基于窗口的共现矩阵:一个简单例子

    • 窗口长度是1(一般是5-10)
    • 对称(左右内容无关)
    • 语料样例
      • I like deep learning.
      • I like NLP.
      • I enjoy flying

        屏幕快照 2015-05-27 下午12.31.08

    存在的问题

    • 规模随着语料库词汇的增加而增加
    • 非常高的维度:需要大量的存储
    • 分类模型会遇到稀疏问题
    • 模型不够健壮

    解决方案:低维向量

    • idea: 将最重要的信息存储在固定的,低维度的向量里:密集向量(dense vector)
    • 维数通常是25-1000
    • 问题:如何降维?

    方法1:SVD(奇异值分解)

    • 对共现矩阵X进行奇异值分解

      屏幕快照 2015-05-28 上午9.24.02

    Python中简单的词向量SVD分解

    • 语料:I like deep learning. I like NLP. I enjoy flying

      屏幕快照 2015-05-28 上午9.35.06

    • 打印U矩阵的前两列这也对应了最大的两个奇异值

      屏幕快照 2015-05-28 上午9.37.56

    用向量来定义单词的意思:

    • 在相关的模型中,包括深度学习模型,一个单词常常用密集向量(dense vector)来表示

      屏幕快照 2015-05-28 上午10.54.13

    Hacks to X

    • 功能词(the, he, has)过于频繁,对语法有很大影响,解决办法是降低使用或完全忽略功能词
    • 延展窗口增加对临近词的计数
    • 用皮尔逊相关系数代替计数,并置负数为0
    • +++

    词向量中出现的一些有趣的语义Pattern

    使用SVD存在的问题

    • 对于n*m矩阵来说计算的时间复杂度是o(mn^2) 当 n
    • 对于新词或者新的文档很难及时更新
    • 相对于其他的DL模型,有着不同的学习框架

    解决方案:直接学习低维度的词向量

    word2vec的主要思路

    • 与一般的共现计数不同,word2vec主要来预测单词周边的单词
    • GloVe和word2vec的思路相似:GloVe: Global Vectors for Word Representation
    • 比较容易且快速的融合新的句子和文档或者添加新的单词进入词汇表

    word2vec的主要思路

    • 预测一个窗口长度为c的窗口内每个单词的周边单词概率
    • 目标函数:对于一个中心词,最大化周边任意单词的log概率

      屏幕快照 2015-05-29 上午9.23.40

    • 对于 p(wt+j/wt) 最简单的表达式是:屏幕快照 2015-05-29 上午9.33.12
    • 这里v和 v 分布是w的“输入”和“输出”向量表示(所以每个w都有两个向量表示)
    • 这就是基本的“动态”逻辑回归(“dynamic” logistic regression)

    代价/目标函数

    • 我们的目标是优化(最大化或最小化)代价/目标函数
    • 常用的方法:梯度下降

      屏幕快照 2015-05-29 上午11.02.19

    • 一个例子(来自于维基百科): 寻找函数 f(x)=x43x3+2 的局部最小点,其导数是 f(x)=4x39x2
    • Python代码:

      屏幕快照 2015-05-29 上午11.06.13

    梯度的导数

    • 白板(建议没有直接上课的同学看一下课程视频中的白板推导)
    • 有用的公式

      屏幕快照 2015-06-04 上午8.05.09

    • 链式法则

      屏幕快照 2015-06-04 上午8.08.25

    word2vec中的线性关系

    • 这类表示可以很好的对词语相似度进行编码
      • 在嵌入空间里相似度的维度可以用向量的减法来进行类别测试

        屏幕快照 2015-06-04 上午8.24.05

    计数的方法 vs 直接预测
    屏幕快照 2015-06-04 上午8.27.56

    GloVe: 综合了两类方法的优点

    • 训练更快
    • 对于大规模语料算法的扩展性也很好
    • 在小语料或者小向量上性能表现也很好

      屏幕快照 2015-06-04 上午8.34.02

    GloVe的效果

    • 英文单词frog(青蛙)的最相近的词

      屏幕快照 2015-06-04 上午8.41.21

    Word Analogies(词类比)

    • 对单词之间的线性关系进行测试(Mikolov et al.(2014))

      屏幕快照 2015-06-04 上午8.47.35

    Glove可视化一

    • 屏幕快照 2015-06-04 上午8.49.00

    Glove可视化二:Company-CEO

    • 屏幕快照 2015-06-04 上午8.50.16

    Glove可视化三:Superlatives

    • 屏幕快照 2015-06-04 上午8.51.27

    Word embedding matrix(词嵌入矩阵)

    • 提前训练好的词嵌入矩阵

      屏幕快照 2015-06-04 下午8.28.32

    • 又称之为查询表(look-up table)

      屏幕快照 2015-06-04 下午8.29.30

    低维度词向量的优点

    • 深度学习词向量的最大优势是什么?
    • 可以将任何信息表征成词向量的形式然后通过神经网络进行传播

      屏幕快照 2015-06-04 下午9.12.28

    • 词向量将是之后章节的基础
    • 我们所有的语义表示都将是向量形式
    • 对于长的短语和句子也可以通过词向量的形式组合为更复杂的表示,以此来解决更复杂的任务–>下一讲
Python 中集成 Ollama 可以通过使用 `ollama` 官方提供的 Python 客户端库来实现。Ollama 是一个本地运行的大型语言模型(LLM)工具,它支持多种模型,如 Llama 2、Mistral 等,并且可以通过简单的 APIPython 应用程序集成。 ### 安装 Ollama Python 库 首先,需要确保你已经在本地系统上安装了 Ollama。你可以从 [Ollama 官方网站](https://ollama.com/)下载并安装适用于你操作系统的版本。 接下来,安装 Python 客户端库。Ollama 提供了一个官方的 Python 包,可以通过 `pip` 安装: ```bash pip install ollama ``` ### 使用 Ollama Python 库 安装完成后,可以使用 `ollama` 模块来调用 OllamaAPI。以下是一个简单的示例,展示如何使用 Ollama 的 `generate` 方法来生成文本: ```python import ollama # 生成文本 response = ollama.generate(model='llama3', prompt='为什么天空是蓝色的?') # 打印响应 print(response['response']) ``` 在这个例子中,`model` 参数指定了要使用的模型(例如 `llama3`),`prompt` 参数是用户输入的提示词。Ollama 会根据提示词生成相应的文本,并返回一个包含 `response` 字段的字典。 ### 获取模型列表 如果你想查看当前可用的模型,可以使用以下代码: ```python import ollama # 获取模型列表 models = ollama.list() # 打印模型列表 for model in models['models']: print(model['name']) ``` ### 模型对话(Chat) Ollama 还支持更复杂的对话模式,允许你在多轮对话中保持上下文。以下是一个使用 `chat` 方法的示例: ```python import ollama # 开始对话 response = ollama.chat( model='llama3', messages=[ {'role': 'user', 'content': '你好,你能帮我做什么?'}, {'role': 'assistant', 'content': '你好!我可以帮助你回答问题、提供建议,甚至进行简单的创作。有什么我可以帮你的吗?'}, {'role': 'user', 'content': '你能告诉我关于机器学习的基础知识吗?'} ] ) # 打印响应 print(response['message']['content']) ``` 在这个例子中,`messages` 参数是一个包含多个对话记录的列表,每个记录都有一个 `role` 和 `content` 字段。Ollama 会根据这些对话记录生成相应的回复。 ### 错误处理 在实际应用中,建议添加错误处理逻辑,以应对可能出现的网络问题或模型加载失败等情况: ```python import ollama try: response = ollama.generate(model='llama3', prompt='为什么天空是蓝色的?') print(response['response']) except Exception as e: print(f"发生错误: {e}") ``` ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值