如何实现BiLSTM实现中文分词?与jieba、LSTM进行对比如何?【文档型详解】

61 篇文章 519 订阅
订阅专栏

1 本文算法

1.1 算法概述或框架图

本次实验主要可以分为三大部分:标注序列、模型训练用于预测标签以及维特比求解最优路径。下面将依次对这三大部分进行概述。

1.1.1 标注序列

这一部分主要就是给句子中的每个字进行标注,具体字标注的方为法有好几种,其中最常见的为4标注和6标注。
本次实验采用MSR语料库进行,MSR数据集是人民日报标注语料库是在得到人民日报社新闻信息中心许可的条件下,以1998年和2014人民日报语料为对象,由北京大学计算语言学研究所和富士通研究开发中心有限公司共同制作的标注语料库。我们首先对语料库进行预处理,这次的分词仅需要词语切分部分的信息,并不需要词性标注信息,因此对原语料库的分词信息进行读取并进行标注,将每个中文字标注为4种类型,分别为S(0)、B(1)、M(2)、E(3),其中S(Single)代表单个字,B(Begin)代表词的第一个字(词的开始),M(Middle)代表词的中间部分字,E(End)代表词的最后一个字(词的结束)。
标注实例如下:广/b 外/e 是/s 一/b 所/e 人/b 才/m 济/m 济/e 的/s 大/b 学/e。理论上来说标注越多会越精细,而效果也会越来越好,但标注太多可能存在时间精力的问题,导致样本不足或样本质量不高等问题。

1.1.2 模型训练

这里我们用到了双向长短期记忆模型(双向LSTM),双向LSTM是基于LSTM进行改进的,而LSTM是递归神经网络的一种变形。前向LSTM与后向LSTM组合构成双向LSTM。如果单独对字特征向量进行其他深度模型的训练的话,无法考虑到字词在句子中的顺序,而LSTM可以捕捉到较长距离的字词依赖关系,并且通过训练可以学到记忆哪些信息和遗忘哪些信息。但如何只是单向LSTM的话存在一个问题:无法从后往前编码信息,而现实生活中的句子前后往往都是有联系的,所以此时选择双向LSTM能够更好的捕捉语义之间的关系,使得后续的标注效果更好。
在分词中,LSTM可以根据输入序列输出一个序列,这个序列考虑了上下文的联系,因此,可以给每个输出序列接一个softmax分类器,来预测每个标签的概率。基于这个序列到序列的思路,我们就可以直接预测句子的标签。BLSTM具体工作实现可以参考图1。

1.1.3 维特比算法求解最优路径

维特比算法是一个特殊但应用最广的动态规划算法,利用动态规划,可以解决任何一个图中的最短路径问题。而维特比算法是针对一个特殊的图——篱笆网络的有向图的最短路径问题而提出的。所以此时正好能够利用维特比算法来帮助我们找到句子标注的最优组合。

1.2 算法各模块流程图等或公式文字描述等

该小结以“我喜欢广州市”为例,并试图采用绘图的方式,来介绍双向LSTM和维特比算法。具体内容如下:
双向LSTM:
在这里插入图片描述
如上图所示,训练后的双向LSTM在给句子中的某一个字,如“欢”字进行预测的时候,不仅会结合前面的“我”和“喜”,而且也会结合“广”、“州”和“市”,最终再输出标注结果,且采用了softmax,所以输出结果中的每个类别的值为对应可能预测的概率值,

维特比算法:
在这里插入图片描述
如上图所示,当双向LSTM对句子中的每个字进行标注后,每个字对应的能够得到一个长度为4的向量,又由于使用了最终分类时使用到了softmax,因此向量中的每个值分别对应类别s、b、m和e的概率值大小,即概率值越大,对应为该类别的可能性更大。此时最终的标注结果的可能结果有4的6次方那么多,且句子越长,对应的可能结果越多,此时若采用穷举的方法,那么算法的时间复杂度会非常的大。因此我们采用了维特比的动态规划的思想,最终得到一个最优解。
在这里插入图片描述
此时结果为:我/s 喜/b 欢/e 广/b 州/m 市/e

1.3 算法细节

维特比算法求解最优解的具体实现过程:
要想找到从开头的“我”到结尾的“市”的最优路径,我们可以先从左往右一列一列地来看。首先是第一列,我们不能武断地说开头第一列哪一个必定是全局最优路径中的起点,目前为止任何一个都有可能是全局最短路径的备选项,所以我们接着往右看,到了第二列“喜”,依次从“喜”对应的s、b、m、e开始遍历,首先是s:
在这里插入图片描述
如上图所示,经过“喜”s的只有4条路径,我们通过简单的运算就可以知道b->s是其中最优的路径,而其他三条都比b->s要差,因此绝不可能是目标答案,可以大胆的删掉了,删掉了不可能是答案的路径,就是维特比算法的重点,因为后面我们再也不用考虑这些被删掉的路径了。现在经过“喜”s的所有路径只剩一条路径了,如下图所示:
在这里插入图片描述
同理,经过“喜”b、“喜”m和“喜”e也可以得到对应的最优子路径。而且对应到每一列都是得到4个候选解。以此类推,到最终的“市”这一列,便能得到4个最优候选解,再从其中选出最优的解即可。

完整代码如下:

import tensorflow as tf
from tensorflow.python.keras.models import Model, load_model
from tensorflow.python.keras.layers import Input, Dense, Dropout, LSTM, Embedding, TimeDistributed, Bidirectional
from tensorflow.python.keras.utils import np_utils
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics import accuracy_score
import numpy as np
import re

# 模型参数设置
embedding_size = 128
maxlen = 32
hidden_size = 64
batch_size = 64
epochs = 25


def load_data(path):
    data = open(path, encoding='utf-8').read().rstrip('\n')
    data = re.split('[,。?!、\n]', data)

    X_data = []
    Y_data = []
    for sentence in data:
        sentence = sentence.split(" ")
        X = []
        y = []
        try:
            for s in sentence:
                s = s.strip()
                if len(s) == 0:
                    continue
                elif len(s) == 1:
                    X.append(char2id[s])
                    y.append(tags['s'])
                elif len(s) > 1:
                    X.append(char2id[s[0]])
                    y.append(tags['b'])
                    for i in range(1, len(s) - 1):
                        X.append(char2id[s[i]])
                        y.append(tags['m'])
                    X.append(char2id[s[-1]])
                    y.append(tags['e'])
            if len(X) > maxlen:
                X = X[:maxlen]
                y = y[:maxlen]
            else:
                for i in range(maxlen - len(X)):
                    X.append(0)
                    y.append(tags['x'])
        except:
            continue
        else:
            if len(X) > 0:
                X_data.append(X)
                Y_data.append(y)
    X_data = np.array(X_data)

    Y_data = np_utils.to_categorical(Y_data, 5)
    return X_data, Y_data



def calc_test_result(result, test_label):
    true_label = []
    predicted_label = []

    for i in range(result.shape[0]):
        for j in range(result.shape[1]):
            if np.argmax(test_label[i, j]) != 4:
                true_label.append(np.argmax(test_label[i, j]))
                predicted_label.append(np.argmax(result[i, j]))

    print("Confusion Matrix :")
    print(confusion_matrix(true_label, predicted_label))
    print("Classification Report :")
    print(classification_report(true_label, predicted_label, digits=2))
    print("Accuracy ", accuracy_score(true_label, predicted_label))
    print("Macro Classification Report :")
    print(precision_recall_fscore_support(true_label, predicted_label, average='macro'))
    print("Weighted Classification Report :")
    print(precision_recall_fscore_support(true_label, predicted_label, average='weighted'))


def viterbi(nodes):
    trans = {'be': 0.5, 'bm': 0.5, 'eb': 0.5, 'es': 0.5, 'me': 0.5, 'mm': 0.5, 'sb': 0.5, 'ss': 0.5}
    paths = {'b': nodes[0]['b'], 's': nodes[0]['s']}  # 第一层,只有两个节点
    for l in range(1, len(nodes)):  # 后面的每一层
        paths_ = paths.copy()  # 先保存上一层的路径
        paths = {}
        for i in nodes[1].keys():  # i为本层节链接点
            # 对于本层节点,找出最短路径。
            nows = {}
            # 上一层的每个结点到本层节点的连接
            for j in paths_.keys():  # j为上层节点
                if j[-1] + i in trans.keys():  # 若转移概率不为0
                    nows[j + i] = paths_[j] + nodes[l][i] + trans[j[-1] + i]
            nows = sorted(nows.items(), key=lambda x: x[1], reverse=True)
            paths[nows[0][0]] = nows[0][1]
    paths = sorted(paths.items(), key=lambda x: x[1], reverse=True)
    return paths[0][0]


def cut_words(data):
    data = re.split('[,。!?、\n]', data)
    sens = []
    Xs = []
    for sentence in data:
        sen = []
        X = []
        sentence = list(sentence)
        for s in sentence:
            s = s.strip()
            if not s == '' and s in char2id:
                sen.append(s)
                X.append(char2id[s])
        if len(X) > maxlen:
            sen = sen[:maxlen]
            X = X[:maxlen]
        else:
            for i in range(maxlen - len(X)):
                X.append(0)

        if len(sen) > 0:
            Xs.append(X)
            sens.append(sen)
    Xs = np.array(Xs)
    ys = model.predict(Xs)

    results = ''
    results2 = ''
    for i in range(ys.shape[0]):
        nodes = [dict(zip(['s', 'b', 'm', 'e'], d[:4])) for d in ys[i]]
        ts = viterbi(nodes)
        for x in range(len(sens[i])):
            if ts[x] in ['s', 'e']:
                results += sens[i][x] + '/'
            else:
                results += sens[i][x]
            # if ys[i][x].tolist().index(max(ys[i][x])) == 0 or ys[i][x].tolist().index(max(ys[i][x])) == 3:
            #     results2 += sens[i][x] + '/'
            # else:
            #     results2 += sens[i][x]
    # print(results[:-1])
    # print(results2[:-1])
    return results[:-1]

if __name__ == '__main__':
    #     print(cut_words('今天又是美好的一天!'))
    # print(cut_words('我喜欢你'))
    vocab = open("data/msr_training_words.utf8", encoding='utf-8').read().rstrip('\n').split('\n')
    vocab = list(''.join(vocab))
    stat = {}
    for v in vocab:
        stat[v] = stat.get(v, 0) + 1
    stat = sorted(stat.items(), key=lambda x: x[1], reverse=True)  # 按出现字数降序排列
    vocab = [s[0] for s in stat]

    char2id = {w: c + 1 for c, w in enumerate(vocab)}
    id2char = {c + 1: w for c, w in enumerate(vocab)}
    tags = {'s': 0, 'b': 1, 'm': 2, 'e': 3, 'x': 4}

    # 模型训练
    X_train, y_train = load_data('data/msr_training.utf8')
    X_test, y_test = load_data('data/msr_test_gold.utf8')

    X = Input(shape=[maxlen, ], dtype='int32', name='input')
    embedding = Embedding(input_dim=len(vocab) + 1, output_dim=embedding_size, input_length=maxlen, mask_zero=True)(X)
    blstm = Bidirectional(LSTM(hidden_size, return_sequences=True), merge_mode='concat')(embedding)
    blstm = Dropout(0.6)(blstm)
    output = TimeDistributed(Dense(5, activation='softmax'))(blstm)
    model = Model(X, output)
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    print(model.summary())
    model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs)

    # 模型保存
    print('模型保存')
    model.save('model_blstm.h5')

    # 模型调用
    print('模型调用')
    model = load_model('model_blstm.h5')

    result = model.predict(X_test)
    calc_test_result(result, y_test)
    
    
    print(cut_words('实现祖国的完全统一是海内外全体中国人的共同心愿'))
    print(cut_words('他从马上下来'))
    print(cut_words('中文分词在中文信息处理中是最最基础的,无论机器翻译亦或信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位。'))

2 实验结果或系统展示

为了进一步检验BLSTM的中文分词效果,我们还提供了LSTM中文分词和jieba中文分词进行对比。
在这里插入图片描述
LSTM:实现/祖国/的/完全/统一/是/海内外/全体/中国/人/的/共同/心愿
BLSTM:实现/祖国/的/完全/统一/是/海内外/全体/中国人/的/共同/心愿
JIEBA:实现/祖国/的/完全/统一/是/海内外/全体/中国/人/的/共同/心愿
此时的BLSTM分词结果好于LSTM分词以及JIEBA分词。
在这里插入图片描述
LSTM:他/从/马上/下来
BLSTM:他/从/马上/下来
JIEBA:他/从/马上/下来
此时三种分词方法的分词结果相同。
在这里插入图片描述
LSTM:中文分词/在/中文/信息/处理/中/是/最最/基础/的/无论/机器/翻译/亦/或/信息/检索/还是/其他/相关/应用/如果/涉及/中文/都/离不开/中文/分词/因此/中文分词/具有/极高/的/地

BLSTM:中文/分词/在/中文/信息处理/中/是/最最/基础/的/无论/机器/翻译/亦/或/信息/检索/还是/其他/相关/应用/如果/涉及/中文/都/离不开/中文/分词/因此/中文/分词/具有/极高/的/地位

JIEBA:中文/分词/在/中文信息处理/中是/最最/基础/的/无论/机器翻译/亦/或/信息检索/还是/其他/相关/应用/如果/涉及/中文/都/离不开/中文/分词/因此/中文/分词/具有/极高/的/地位/

此时分词的效果:JIEBA > BLSTM > LSTM。

LSTM模型效果如下:
在这里插入图片描述
BLSTM模型效果如下:
在这里插入图片描述
通过对比我们不难发现,LSTM的准确率为95.5%,效果要远高于LSTM,而这也正好符合了我们最开始所提到的双向LSTM能够更好的捕捉语义之间的关系,使得后续的标注效果更好。

3 讨论和分析

3.1 实例分析

以“我喜欢你”这句话为例:
首先我们将该句以字进行拆分,分为“我”、“喜”、“欢”和“你”四个字,在事先构建好的dict词典中,将这四个由字符串转为数值,并构建为一个向量,且为方便后续模型预测的进行,需将长度不足事先设定好的maxlen值的向量进行填充,之后放进BLSTM模型进行预测,此时得到一个矩阵,如下所示:
[[[9.9999571e-01 3.9801721e-06 4.1145225e-09 4.0362377e-07 5.0128282e-20]
[2.1982818e-05 9.9997699e-01 1.0702739e-06 1.3490954e-08 2.3963344e-21]
[1.6898995e-05 4.3487813e-07 2.6678084e-04 9.9971586e-01 1.6420975e-21]
[9.9862480e-01 1.3330624e-03 1.8524337e-05 2.3612887e-05 4.2626622e-17]
[3.0711657e-01 2.8803250e-01 1.3073629e-01 2.7393839e-01 1.7633705e-04]

[3.0711657e-01 2.8803250e-01 1.3073629e-01 2.7393839e-01 1.7633705e-04]
[3.0711657e-01 2.8803250e-01 1.3073629e-01 2.7393839e-01 1.7633705e-04]
[3.0711657e-01 2.8803250e-01 1.3073629e-01 2.7393839e-01 1.7633705e-04]
]]
此时我们就得到了每个字对应的句向量,即每个标签可能的概率值。如下:
“我”:{‘s’: 0.9999957, ‘b’: 3.980172e-06, ‘m’: 4.1145225e-09, ‘e’: 4.0362377e-07}
“喜”:{‘s’: 2.1982818e-05, ‘b’: 0.999977, ‘m’: 1.0702739e-06, ‘e’: 1.3490954e-08}
“欢”:{‘s’: 1.6898995e-05, ‘b’: 4.3487813e-07, ‘m’: 0.00026678084, ‘e’: 0.99971586}
“你”:{‘s’: 0.9986248, ‘b’: 0.0013330624, ‘m’: 1.8524337e-05, ‘e’: 2.3612887e-05}
之后,我们再利用上述提到的维特比算法的动态规划的思想,求解出最优路径,即:s -> b -> e -> s。所以最后,我们只需要判断最优路径中哪个为s或者e,在其后面做分割即可。
最终结果为:我/ 喜欢/ 你。

3.2 讨论分析

其实本次实验我们存在一个问题,即转移矩阵中的转移概率是我们自行定义的值,与现实生活中的概率值存在较大误差,而这也会进一步导致最终利用维特比算法求解最优路径的方法没有办法达到更为理想的效果。

同时,BLSTM模型在解决分词这个标注问题上表现比较不错,在比较小的语料库上能够达到这样一个勉强能用的效果,甚至在个别句子上优于Jieba,但缺点也很明显,首先需要大量的标注好的分词训练数据集,更多的数据量基本意味着更好的分词效果,其次本模型对于新词没有很好的适应能力,对于新词汇的分词会出现困难,并且没有对专有名词进行收录,对于生僻的人名也没有办法很好的处理。

4 结论

采用BLSTM+维特比算法那进行中文分词的效果已经是比较不错的了,并且在某些情况甚至优于jieba分词,但是仍然存在缺陷。首先模型训练需要由大量的数据进行训练,且对数据的质量要求较高;其次是该模型对于新词没有很好的适应能力,究其根本也是深度学习本身存在的一些问题,导致了对于某些情况下的分词效果不佳。而除了本文提及的方法外,还有很多效果不错且较为成熟的方法。如HMM、CRF等。事实上,不管是基于规则还是基于HMM、CRF或者是深度学习的方法,在分词效果的具体任务中的差距不是特别明显。在实际运用中,比较多是基于词典的方式进行分词,然后再用统计分词方法进行辅助。不仅能保证分词的准确率,也能对未登录词和歧义词有较好的识别。Jieba分词就是基于规则和基于统计两类方法,且运行速度即分词效果往往由于基于长短期记忆模型的中文分词效果。

结束语

整理不易,希望大家能够关注点赞。

另外,对上述内容或者代码有疑问或者需求的,可以评论留言告诉我。

推荐关注的专栏

👨‍👩‍👦‍👦 机器学习:分享机器学习理论基础和常用模型讲解
👨‍👩‍👦‍👦 数据分析:分享数据分析实战项目和常用技能整理


关注我,了解更多相关知识!

CSDN @报告,今天也有好好学习

NLP工具::face_savoring_food:本项目推进通过Tensorflow基于BiLSTM + CRF实现中文分词,词性标注,命名实体识别(NER)
02-03
NLP工具 本项目初步通过Tensorflow基于BiLSTM + CRF实现字符级序列标注模。 功能: 1,对未登录字(词)识别能力 2,Http接口 3,可快速实现分词,词性标注,NER,SRL等序列标注模 欢迎各位大佬吐槽。 说明 环境配置:创建新的conda环境 $ conda env create -f environment.yaml 语料处理 不同标注语料格式不同,需要额外处理,在示例/DataPreprocessing.ipynb中提供了人民日报2014准备过程(该语料集未上传至github,只有部分样例于corpus,可通过互联网找到。若发现可发邮件给我),语料格式:
自然语言处理四个作业:jieba,cbow,lstm,crf等
07-25
我的作业,包含jieba,cbow,lstm,crf等,有搜索引擎,有的做了界面。
一幅图真正理解LSTM、BiLSTM
热门推荐
不精,不诚,不足以动人
09-01 4万+
1 前言 本文不是RNN系列入门,而是对RNN、LSTM、BiLSTM的内部结构和输入输出做透彻的剖析。 RNN:循环神经网络 LSTM:长短期记忆网络 BiLSTM:双向长短期记忆网络 重要的先验知识: 本质上单个RNN cell是在多个时间步上展开的形式,也可以理解为RNN是神经网络在时序上的权重共享(CNN相当于空间上的权重共享),LSTM也都是一样。 1.1 RNN回忆与概览 1.2 BiLSTM回忆与概览 LSTM内部结构相对RNN做了改进,BiLSTM中Bi指的是Bi-di
TensorFlow|基于双向LSTM+条件随机场(BiLSTM-CRF)的中文分词
shillyshally的博客
12-01 1万+
  更新内容(2018-12-2): 已开源在GIthub上: 地址:https://github.com/shillyshallysxy/Learning_NLP 前言 中文分词在中文信息处理中是最为基础的一步,无论机器翻译还是信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位。 中文分词是自然语言处理的分支,是指用计算机对中文进行处理。和大部分西方...
python英文语义角色标注_八款中文词性标注工具使用及在线测试
weixin_39820437的博客
11-22 813
结束了中文分词工具的安装、使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支持中文词性标注的,这里面唯一的区别,就是各自用的词性标注集可能有不同:以下逐一介绍这八个工具的中文词性标注功能的使用方法,至于安装,这里简要介绍,或者可以参考之前这篇文章:Python中文分词工具大合...
基于BiLSTM+CRF的中文分词(CWS)(附代码以及注释)
Yang_137476932的博客
04-12 5154
本人菜鸟,写的不好的大家包涵! 之前做过HMM进行中文分词,这次使用BiLSTM加CRF(条件随机场)进行中文分词。 HMM中文分词:https://blog.csdn.net/Yang_137476932/article/details/105467673 本文代码github地址:https://github.com/WhiteGive-Boy/CWS-Hmm_BiLSTM-CRF ...
基于双向BiLstm神经网络的中文分词详解及源码
weixin_34115824的博客
03-20 1811
基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码地址 在自然语言处理中(NLP,Natural Language ProcessingNLP,Natural Language Processing),分词是一个较为简单也基础的基本技...
bilstm+crf中文分词_最新中文NER模介绍(二)
weixin_39850697的博客
11-24 482
深度学习时代中文NER出现了LSTMLSTM+CRF、BERT、BERT+CRF等方法,前期主要单纯基于字信息或词信息(词信息需要更多的训练文本)。基于字的方法很少考虑词,但词又包含了大量的信息,如何有效利用词信息是近两年中文NER的主要工作。近期融合词信息工作主要可以分为结构融合和数据融合两类。结构融合通过调整模结构融合词信息,数据融合主要通过多任务学习实现。结构融合>> Chi...
bilstm+crf中文分词_多标准中文分词
weixin_39771791的博客
12-01 423
Multi-Criteria Chinese Word Segmentation with Transformer(19.6.28)这是复旦19年6月刚发的文章,初略看一遍,记笔记。Chinese Word Segmentation简称CWShttps://arxiv.org/pdf/1906.12035.pdf亮点:将多标准学习引入到CWS,不同分词标准语料共享common knowledge,...
BILSTM实现MNIST数据集学习
终极香蕉大菠萝的博客
04-04 370
from __future__ import print_function import tensorflow as tf from tensorflow.contrib import rnn import numpy as np # Import MNIST data from tensorflow.examples.tutorials.mnist import input_data mnis...
使用keras实现BiLSTM+CNN+CRF文字标记NER
09-16
主要介绍了使用keras实现BiLSTM+CNN+CRF文字标记NER,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Python-使用keras实现的基于BiLSTMCRF的中文分词词性标注
08-10
使用keras实现的基于Bi-LSTM CRF的中文分词 词性标注
CRF,LSTM,最大后向匹配法实现中文分词
06-18
3种中文分词方法:最大后向匹配法,CRF,LSTM。其中LSTM又用了三种方法输入,glove向量,Word2vec向量,还有将字映射成整数再通过embedding层映射成字向量作为输入。还包含中文分词的评分脚本。
python使用jieba实现中文分词去停用词方法示例
09-20
jieba分词,完全开源,有集成的python库,简单易用。下面这篇文章主要给大家介绍了关于python使用jieba实现中文分词去停用词的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
python同义词替换的实现jieba分词)
12-30
TihuanWords.txt文档格式 注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词。 年休假 年假 年休 究竟 到底 回家场景 我回来了 代码 import jieba def replaceSynonymWords(string1): # 1读取同义...
BiLSTM+keras+tensorflow实现中文分词
GUANYX的博客
10-15 5279
一、Word2Vec Word2Vec(Word Embeddings)——词向量/词嵌入 是一个可以将语言中字词转化为向量形式表达(Vector Representations)的模。 主要分为CBOW(Continuous Bag of Words)和Skip-Gram两种模式,其中CBOW是从原始语句(比如:中国的首都是____)推测目标字词(比如:北京);而Skip-Gram则正好...
中文分词算法调研
qq_29153321的博客
01-17 1538
1. 原理-分词算法 1.1. 基于词典的分词 1、最大匹配分词算法:寻找最优组合的方式是将匹配到的最长词组合在一起。其缺点是严重依赖词典,无法很好地处理分词歧义和未登录词。优点是由于这种方法简单、速度快、且分词效果基本可以满足需求,因此在工业界仍然很受欢迎。 2、最短路径分词算法:将一句话中的所有词匹配出来,之后寻找从起始点到终点的最短路径作为最佳组合方式 基于Dijkstra算法求解最短路径、...
中文路径_中文分词的原理、方法与工具
weixin_39609170的博客
12-03 198
海德格尔说“词语破碎处,无物可存在”。中文句子不像英文那样的词与词之间有显示空格边界,使得词和词组边界模糊。为了让计算机更容易理解文本,通常中文信息处理的第一步是中文分词中文分词是在中文句子中的词与词之间加上边界标记。本文首先介绍词、词组、句子、语言模等基本概念及基本原理,比如:短语结构语法(PSG)模、n元语法模( n-gram)、神经网络语言模(NNLM)、Masked Langua...
python实现中文分词jieba
最新发布
09-09
import jieba text = "我爱自然语言处理" seg_list = jieba.cut(text) print(list(seg_list)) # 输出结果:['我', '爱', '自然语言', '处理'] # 使用精确模式分词 seg_list = jieba.cut(text, cut_all=False) print(list(seg_list)) # 输出结果:['我', '爱', '自然语言', '处理'] # 使用全模式分词 seg_list = jieba.cut(text, cut_all=True) print(list(seg_list)) # 输出结果:['我', '爱', '自然', '自然语言', '语言', '处理'] # 使用搜索引擎模式分词 seg_list = jieba.cut_for_search(text) print(list(seg_list)) # 输出结果:['我', '爱', '自然', '语言', '自然语言', '处理']

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 分享一个不错的数据分析实战案例【全程附图】EXCEL 71706
  • 一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】 65990
  • 轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类 64835
  • 全文六万字《计算智能》智能优化算法 张军【Python】 59014
  • 一文带你用Python玩转K-Means算法 ;各种参数详细说明;如何评估无监督模型? 56204

分类专栏

  • 文本分类 5篇
  • 数据分析 61篇
  • 统计学习方法 3篇
  • 数据库 19篇
  • SQL刷题大全(Hive / MySQL) 16篇
  • 机器学习 16篇
  • 特征融合 1篇
  • 音频特征提取 1篇
  • 计算智能 12篇
  • 图神经网络 1篇
  • python刷题 1篇

最新评论

  • 如何搞懂html+php实现个人博客网站?【附代码详解】毕业设计 大作业项目

    yuanshen_qido: 大佬求源码,1323922554@qq.com

  • 轻松读懂人脸情感分类实现【含图形界面GUI】Python

    孑一.: 已点赞评论收藏,可以分享源码吗拜托拜托1906730800@qq.com

  • 一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】

    l56zd: 博主您好,想求个代码!谢谢!邮箱:3418117813@qq.com

  • 一文搞懂什么是蚁群优化算法(Ant Colony Optimization, ACO)【附应用举例】

    weixin_57363436: 你好up主,感谢你的分享,想请教您一个问题,针对最大最小蚁群(MMAS)分为最大最小蚁群算法和最大最小蚁群系统,想问一下这两者在python代码上到底有什么区别啊?还是说这这两者本质上是同一个概念,因为我观察他们在传统蚁群算法上的改进特点都很类似。还有就是大佬是否有最大最小蚁群算法的python代码关于基础TSP问题的源码求一份表情包(genghuilin20001123@163.com)

  • 【毕业设计 大作业高分项目】html+php实现个人博客网站

    Nawan_shop: 求代码2540248829@qq.com

大家在看

  • Flutter 中的 ErrorWidget 小部件:全面指南
  • 【LLaVA系列】CLIP/LLaVA/LLaVA1.5/VILA 模型全面梳理! 1078
  • MoE 大模型的前世今生
  • 5G RedCap技术特点及应用场景 - 5G RedCap 定位终端
  • 制作launch图标

最新文章

  • 从数据角度分析年龄与NBA球员赛场表现的关系【数据分析项目分享】
  • 我和关注我的1w个粉丝“合影”啦–爬取上万个粉丝的数据并进行数据可视化分析,收获满满
  • Python中关于字典dict知识点的详细整理【定义、增删查改、遍历字典、字典函数】
2024年1篇
2022年10篇
2021年72篇
2020年18篇
2019年1篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

报告,今天也有好好学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司保定网络推广价格临汾SEO按天收费报价塘坑SEO按天计费公司临猗网站制作哪家好怒江建设网站价格临汾SEO按天收费报价临沧SEO按天计费公司合肥关键词按天计费价格娄底网站排名优化公司伊春英文网站建设推荐凉山外贸网站制作价格湘西优秀网站设计哪家好临沂网站建设推荐郑州百搜标王公司鹤壁seo优化公司成都网站建设哪家好六安网站设计模板公司昌都阿里店铺托管哪家好遂宁网站优化按天收费推荐九江网站建设推荐坂田网页制作公司邯郸网站搜索优化坑梓模板制作报价鸡西营销型网站建设公司南山关键词按天计费多少钱杭州网站优化按天收费多少钱河池网络推广松原网站优化按天扣费价格潮州模板推广推荐大运外贸网站设计推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化