自然语言处理信息检索
文章平均质量分 91
这是我关于NLP技术的一个专栏,内容既包含传统方法中的诸多重要思想,又囊括了由深度学习进展而蓬勃兴起的许多新技术。算法上希望尽可能剥丝抽茧般展现细节,而实践上则会基于NLTK、gensim展示快速搭建和实现NLP应用的方法。并提供包含完整代码的Jupyter Notebook下载,有问题欢迎留言讨论
白马负金羁
数据挖掘 | 统计分析 | 图像处理 | 程序设计
展开
-
Word Embedding与Word2Vec
词嵌入(Word Embedding)是NLP中的一个重要话题。随着深度学习的兴起,研究人员开始设计基于神经网络的词嵌入方法,其中最为重要,也是当前最流行的Word Embedding方法就是Tomas Mikolov在谷歌工作时发明的Word2Vec方法,同时谷歌还开源了Word2Vec这个工具箱的源码。gensim在原有的基于C语言的Word2Vec工具箱之上进行了封装,使其能够在Python中更加轻松地被调用原创 2017-09-05 02:39:43 · 43470 阅读 · 4 评论 -
站在巨人的肩膀上:Open AI的Text Embedding
自OpenAI公司的ChatGPT横空出世以来,大语言模型可谓风头无量。个人用户可以直接使用ChatGPT这样的会话式交互平台来辅助自己的日常工作,提高生产效率。除此之外,如果要做进一步的开发,就需要使用OpenAI提供的API。OpenAI 的 API 可用于几乎所有需要理解自然语言的任务原创 2024-07-03 08:44:56 · 241 阅读 · 0 评论 -
站在巨人的肩膀上:OpenAI API与Fine-tuning
自OpenAI公司的ChatGPT横空出世以来,大语言模型可谓风头无量。个人用户可以直接使用ChatGPT这样的会话式交互平台来辅助自己的日常工作,提高生产效率。除此之外,如果要做进一步的开发,就需要使用OpenAI提供的API。OpenAI 的 API 可用于几乎所有需要理解自然语言的任务。而且,使用API还可以大批量地自动产生输出本文原创 2024-06-27 08:10:51 · 235 阅读 · 0 评论 -
微调BERT实现对IMDB数据集的情感分析(Sentiment Analysis)
BERT是Google提出的一个基于Transformer的自然语言处理领域的预训练模型。在得到一个预训练的模型之后,针对不同的具体任务,还要做Fine-tuning。本文将演示在Tensorflow中微调BERT模型实现对文本进行分类的目的。文本情感分析(Sentiment Analysis)是自然语言处理中的一个常见任务原创 2024-01-22 08:17:55 · 401 阅读 · 0 评论 -
BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【3】
BERT(Bidirectional Encoder Representations from Transformers)是Google提出的一个基于Transformer的自然语言处理领域的预训练模型。BERT这种预训练模型是“自监督的”或者半监督的(Semi-supervised Learning)。本文将在Tensorflow/Keras中运用BERT实现文本分类任务原创 2024-01-04 08:43:43 · 1403 阅读 · 0 评论 -
BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【2】
BERT(Bidirectional Encoder Representations from Transformers)是Google提出的一个基于Transformer的自然语言处理领域的预训练模型。BERT这种预训练模型是“自监督的”或者半监督的(Semi-supervised Learning)。本文将在Keras中演示BERT的使用原创 2024-01-03 14:52:44 · 1345 阅读 · 0 评论 -
BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【1】
BERT(Bidirectional Encoder Representations from Transformers)是Google提出的一个基于Transformer的自然语言处理领域的预训练模型。BERT这种预训练模型是“自监督的”或者半监督的(Semi-supervised Learning)。也就是说,我们手头拥有大量未标记的数据——自然语言中的句子。为了训练一个语言模型,就自己创造一些任务,例如Maked LM和NSP原创 2024-01-02 13:58:11 · 1257 阅读 · 0 评论 -
Byte-Pair Encoding(BPE)
Byte-Pair Encoding(简称BPE)是一种在NLP中使用的压缩算法,它用一小组子词单元表示大词汇量。它广泛用于各种NLP任务,如machine translation, text classification, and text generation。BPE的基本思想是通过迭代地合并文本语料库中最频繁的相邻字节或字符对,直到达到预定的词汇大小。生成的子词单元可用于以更紧凑和高效的方式表示原始文本原创 2024-01-02 13:55:37 · 1769 阅读 · 0 评论 -
基于Transformer实现文本分类(Keras/TensorFlow)
2017年,Google 在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。而且实验也证明Transformer 在效果上已经完败传统的 RNN 网络原创 2023-02-16 07:56:12 · 2798 阅读 · 1 评论 -
LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):下
2017 年,Google 在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。而且实验也证明Transformer 在效果上已经完败传统的 RNN 网络原创 2023-02-11 04:54:25 · 3371 阅读 · 0 评论 -
LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):上
2017 年,Google 在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。而且,实验也证明Transformer在效果上可以完败RNN,本文主要介绍 Transformer 模型的具体实现,作为上篇,我们先把Multi-head Self-Attention解释清楚原创 2023-02-10 10:43:27 · 1194 阅读 · 0 评论 -
在RNN模型中引入注意力机制(Attention)
将Seq2seq模型用于机器翻译时,一个明细的问题在于随着输入句子越来越长,更早输入的单词就很大可能会被忘掉。于是,随着输入句子中单词数变多,翻译质量就会很快劣化。改善此问题的一个方法就是引入注意力机制(Attention),本文由此展开解释Attention的基本原理...............原创 2022-03-29 08:02:47 · 3034 阅读 · 0 评论 -
VecMap: unsupervised cross-lingual mappings of word embeddings(精细解读与Python实例分析)
Cross-lingual embedding mappings 是NLP(或机器翻译)中一个常见的基础任务。要使用神经网络来实现一些NLP的任务,需要为每个单词找到一个numerical representation。这种任务可以由word2vec过程来完成。但一种语言的语料库只能生成一套word embeddings。在进行机器翻译的时候,我们要面对的是两种(及以上)不同的语言,这时就需要利用Cross-lingual embeddings原创 2015-11-12 13:17:43 · 10078 阅读 · 4 评论 -
传说中的RNN到底是何方神圣?
假设你已经知道最基本的人工神经网络模型(也就是全连接的前馈神经网络),那么希望本文可以帮助你理解RNN,也就是传说中的循环神经网络。鉴于网上的文章龙蛇混杂,水平参差不齐。而且拙劣者远远多于(甚至已经稀释了)优秀的文章。所以本文的意义就在于令初学者免于陷入“垃圾”文章之海洋的窘境原创 2017-10-19 04:09:01 · 4449 阅读 · 0 评论 -
简单明了的LSTM/GRU应用实例(Tensorflow版)
本文用一个简单的分类(Classification)任务来演示在Tensorflow中使用RNN的基本技巧。更确切地说是使用LSTM(你可以认为它是一种特殊的RNN)。鉴于本文仅属于入门级教程,因此你可以不必太关心LSTM的内部结构。但是对于RNN的基本认知仍然是必要的。这个例子的源码主要来自文献【1】(笔者有修改),而【1】的作者又是参考的文献【2】。如果你感觉自己对RNN仍然一窍不通...原创 2017-10-19 04:03:22 · 19681 阅读 · 4 评论 -
深入理解Seq2seq模型(Sequence2sequence)
机器翻译(Machine Translation)是NLP领域中一个重点研究的话题。随着深度学习或者神经网络的发展,现在神经机器翻译(Neuralmachine translation)已经成为机器翻译领域中最流行的方法。要了解神经机器翻译,Sequence2sequence模型(简称Seq2seq)是第一步.........原创 2021-07-21 11:05:43 · 1338 阅读 · 0 评论 -
杰卡德距离(Jaccard Distance)原理与应用(Python和NLTK实现)
杰卡德距离(Jaccard Distance)是用来衡量两个集合差异性的一种指标,它是杰卡德相似系数的补集,被定义为1减去Jaccard相似系数。而杰卡德相似系数(Jaccard similarity coefficient),也称杰卡德指数(Jaccard Index),是用来衡量两个集合相似度的一种指标。杰卡德指数最早由瑞士苏黎世联邦理工学院的植物学和植物生理学教授保罗·杰卡德(Paul Jaccard)提出原创 2016-02-22 11:57:37 · 12724 阅读 · 5 评论 -
句向量(句嵌入)模型sent2vec的训练及应用
本文讨论NLP中的句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。这方面已经发表的成果也是比较多的,本文中所涉及的技术主要源自NAACL 2018的一篇论文,其中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展,该所谓的扩展中一个重要改进就是引入了n-gram原创 2020-07-28 13:14:13 · 9902 阅读 · 1 评论 -
孪生神经网络(Siamese)比较两个句子语义相似性
深度学习在自然语言处理(NLP)领域已经被广泛应用,在传统领域过去看似复杂的挑战,也都已经取得了非常显著的进步。本文从一道Kaggle实战题目说起,并借此为例,展现深度学习技术在NLP上的一个应用。该实际问题可以被认为是语义理解或神经翻译的一个典型例子,在解决这个问题的过程中,我们将具体用到包括LSTM、Word Embedding、孪生(Siamese)神经网络原创 2020-03-24 08:50:12 · 8910 阅读 · 0 评论 -
自然语言处理实战之微博情感偏向分析
自然语言处理(NLP)中一个很重要的研究方向就是语义的情感分析(Sentiment Analysis)。例如IMDB上有很多关于电影的评论,那么我们就可以通过Sentiment Analysis来评估某部电影的口碑。本文演示利用Scikit Learn工具箱中的Logistic Regression函数进行Python下的微博情感偏向分析的实例原创 2016-04-14 23:22:38 · 15100 阅读 · 4 评论 -
自然语言处理中的N-Gram模型详解
N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。这是模糊匹配中常用的一种手段。本文将从此开始,进而向读者展示N-Gram在自然语言处理中的各种powerful的应用。原创 2016-04-29 21:32:23 · 156224 阅读 · 15 评论 -
统计机器翻译中的IBM1模型
机器翻译(Machine Translation)是自然语言处理中一个重要的研究反向。特别是随着机器学习技术的发展,当前机器翻译的主流已经转向基于统计机器学习的方法。在这个过程中,IBM的研究人员提出了一系列的SMT(Statistical Machine Translation)方法,对这个领域的发展起到了至关重要的作用。现在人们习惯上称这一系列的方法为 IBM models。本文主要介绍其中最早被提出的IBM 1 model原创 2009-07-10 21:15:00 · 7190 阅读 · 6 评论 -
序列标签与BIO编码
Sequence labeling是自然语言处理中的一个元问题。特别在raw labelling中,BIO encoding 是一种常见而且重要的方式,在NER(named entity recognition)中具有很重要的应用原创 2009-07-22 11:50:00 · 7462 阅读 · 13 评论 -
自然语言处理中的上下文无关文法(CFG)
最常被用来对英语(或其他自然语言)之成分结构进行建模的数学系统就是上下文无关文法(CFG)。一个CFG由一系列rules(或productions)组成,每个rule给出了 语言中的符号(symbols)可以被组织或排列在一起的规则,以及符号和单词构成的字典(lexicon)原创 2009-12-26 21:59:00 · 7320 阅读 · 9 评论 -
CYK算法详解
在计算机科学领域,CYK算法(也称为Cocke–Younger–Kasami算法)是一种用来对 上下文无关文法(CFG,Context Free Grammar)进行语法分析(parsing)的算法。该算法最早由John Cocke, Daniel Younger and Tadao Kasami分别独立提出,其中John Cocke还是1987年度的图灵奖得主。CYK算法是基于动态规划思想设计的一种自底向上语法分析算法原创 2009-10-14 19:13:00 · 7726 阅读 · 5 评论 -
TF-IDF算法解析与Python实现
TF-IDF是一种用于信息检索与文本挖掘的常用加权技术。例如当手头有一些文章时,我们希望计算机能够自动地进行关键词提取。而TF-IDF就是可以帮我们完成这项任务的一种统计方法。它能够用于评估一个词语对于一个文集或一个语料库中一份文档的重要性。本文基于自然语言处理中的一些方法,利用Python实现TF-IDF算法,并讨论Scikit-Learn中的相关函数。原创 2016-05-23 13:18:20 · 51962 阅读 · 13 评论 -
Rocchio算法
查询扩展(Query Expansion)是信息检索领域的一个重要话题。Rocchio算法源自1970年代建立的SMART IR 系统。它以在 IR 系统建立的 RF 方法为基础,通过查询的初始匹配文档对原始查询进行修改以优化查询的方法。Rocchio算法提供了一种将相关反馈信息融到向量空间模型(VSM,Vector Space Model)的方法。原创 2016-03-19 11:53:32 · 7053 阅读 · 2 评论 -
利用NLTK在Python下进行自然语言处理
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。自然语言工具箱(NLTK,Natural Language Toolkit)是一个基于Python语言的类库,它也是当前最为流行的自然语言编程与开发工具。在进行自然语言处理研究和应用时,恰当利用NLTK中提供的函数可以大幅度地提高效率。本文就将通过一些实例来向读者介绍NLTK的使用。原创 2016-04-03 20:14:50 · 36095 阅读 · 9 评论 -
Python自然语言处理:词干、词形与MaxMatch算法
自然语言处理中一个很重要的操作就是所谓的stemming 和 lemmatization,二者非常类似。它们是词形规范化的两类重要方式,都能够达到有效归并词形的目的,二者既有联系也有区别。基于贪婪策略设计的MaxMatch算法在中文自然语言处理中应用广泛,本文结合NLTK来演示在Python下进行NLP的一些技术。原创 2016-04-06 18:47:59 · 18504 阅读 · 1 评论 -
在信息检索中应用Inverted Index
Inverted Index是一种索引数据结构,在很多DBMS中都有使用。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。在信息检索系统中,Inverted Index是一种高效的TDM组织方式原创 2011-03-19 00:06:00 · 4917 阅读 · 12 评论 -
逐点互信息PMI(Pointwise mutual information)
在数据挖掘或者信息检索的相关资料里,经常会用到PMI这个指标来衡量两个事物之间的相关性。而在NLP中,考察两个词的相关性也非常有意义。孔子说:“不知其人视其友” 。英语俗语中也有类似表述:“You shall know a person by the company it keeps.” 后来语言学家 Firth在此基础上造出“You shall know a word by the company it keeps” 这句语言学名句。可见考察两个词共同出现(co-occurrence)的性质就相当有必要,原创 2010-10-28 14:30:00 · 16962 阅读 · 20 评论 -
信息检索中的经典算法——BM25
BM25(Best Match25)是在信息检索系统中根据提出的query对document进行评分的算法。它主要由Stephen E. Robertson, Karen Spärck Jones等人在上世纪70到80年代提出。BM25算法首先由Okapi系统实现(Okapi是伦敦城市大学实现的信息检索系统),所以又称为Okapi BM25原创 2010-10-25 23:00:00 · 6703 阅读 · 20 评论 -
概率上下文无关文法PCFG
面对CFG可能产生多种语法分析结果的问题,一个很重要的处理方法就是引入概率上下文无关文法(PCFGs,Probabilistic context-free grammars ),最初由Booth于1969年提出。对PCFG进行语法分析时,还会用到Probabilistic CKY 算法,它是在原始的CKY算法之上改进而来的,最初由 Ney 在1991年提出原创 2010-04-27 12:59:00 · 8317 阅读 · 27 评论 -
自然语言处理中的Earley算法
前面我们已经讲过在对CFG进行语法解析(Parsing)时,有两种主要策略,即自下向上和自上向下两种。其中自下向上的代表算法就是CKY算法,本文将介绍另外一种采用自上向下策略设计的著名算法——Earley算法。与CKY算法类似,Earley算法也是基于动态规划思想设计的,但不同的是,Earley算法并不需要进行CNF转化原创 2010-05-10 15:22:00 · 8114 阅读 · 11 评论 -
自然语言处理中N-Gram模型的Smoothing算法
为了解决使用N-Gram模型时可能引入的稀疏数据问题,人们设计了多种平滑(Smoothing)算法,本文将讨论其中最为重要的几种。具体包括:Add-one (Laplace) Smoothing, Add-k Smoothing, Backoff(回退),Interpolation(插值),Absolute Discounting,以及目前最先进的Kneser-Ney Smoothing算法。原创 2016-05-02 19:35:34 · 43526 阅读 · 5 评论