0 如何解决一个问题?
编程时,如何解决一个问题?
第一步 确保理解问题
一个问题是由可能的输入和输入与输出之间的关系所定义的。
首先 不要紧张
看清输入是什么,输入是如何表示的
看清输出是什么
解决问题
首先 自己手写一些例子的解决过程(从简单的例子开始),想象人会怎么解决
通过例子开始写算法的伪码,不需要关注细节,先将大致的想法写出来。
如果通过思考人的解决方式所得出的方法比较复杂,重新开始思考新的简单的方式,因为计算机适合重复和枯燥的计算,所以开始想最直接简单的方式(后面需要优化的时候再去优化)。
写伪码时,写的是重要且简单的步骤(步骤复杂的地方选择用函数来实现)
一步一步地写出伪码对应的程序,如果有必要每一步需要测试其正确与否。
NLP的任务
NLP根据任务不同,可以分为: token-level task:任务的目标是token级别。例如,Cloze(完形填空)是为了预测句子中某处的词,POS(词性标注)是为了确定文本中每个词的词性(包括动词、名词等等),NER(命名实体识别)是为了从文本中识别出命名实体(实体包括人名、地名等等),以及其他。 sequence-level task:任务的目标是句子级别。例如,NLI(自然语言推理)是为了判断两个句子之间的关系(相近?矛盾?还是中立?)。
token-level task
1. NER (Named Entity Recognition)
命名实体识别任务,从文本中识别出命名实体,实体一般包括人名、地名、机构名、时间等,还有更加专业的专业实体。 NER的本质是对句子中的每个token打标签, 判断每个token的类别。
常用的数据集有:
NER (Named Entity Recognition) dataset: 实体包含Person, Organization, Location, Miscellaneous, or Other (non-named en ...
NLP基础之词向量
词(Word)
对于人类所理解的词语,英文单词(比如apple)为一个词,中文里一个字(中)或者一个词语(苹果)为一个词。
1 词向量(Word Vector)
1.1 词向量简介
词向量也叫做词嵌入(Word Embedding),将人类所理解的自然语言的词映射为实数向量,也就是将文本中的词转换为数字向量的方法。一般情况下是将一个单词用高维的向量来表示,例如:
"狗"表示为[2, 3, 3]
"猫"表示为[1, 2, 3]
"雪"表示为[14, 2, 1]
1.2 词向量相似性度量
对于上述三个词向量,常见的方法是使用余弦相似度来计算词向量之间的距离:
狗和猫的余弦相似度: \[
cos(\theta_1) = \frac{2\times1+3\times2+3\times3}{\sqrt{2\times2+3\times3+3\times3}\sqrt{1\times1+2\times2+3\times3}} = 0.969
\]
狗和雪的余弦相似度为: \[
cos(\theta_2) = \frac{2\times14+3\times2+3\time ...