Coggle 30 Days of ML(23年1月)打卡

任务1:数据集读取

  • 1.1 简介

  • 自然语言处理(Natural Language Processing, NLP)是计算机科学、人工智能和语言学的交叉领域,其目标是使计算机能够理解、生成和处理人类语言。常见的 NLP 技术包括语音识别、文本分析、机器翻译等。这些技术都是基于人工智能和机器学习的算法来实现的。

    文本匹配是自然语言处理中的一种常见任务。它可以用来判断两个文本之间的相似度或相关性。常见的文本匹配任务包括:文本相似性匹配、问答匹配、查询-文档匹配等。这些任务的具体实现可以使用机器学习技术,例如使用神经网络模型进行文本嵌入,然后使用余弦相似度或其他相似度度量来计算文本之间的相似度。

    LCQMC(Large-scale Chinese Question Matching Corpus)是一个大规模的中文文本匹配数据集。它包含超过 400,000 个标记为重复或非重复的问题对。该数据集由中国科学院自动化研究所(CASIA)深度学习技术与应用国家工程实验室(NEL-DLT)创建。

    LCQMC 数据集中的问题涵盖广泛的主题,并以口语化的中文编写,使其成为文本匹配模型具有挑战性的数据集。该数据集通常用于训练和评估各种中文文本匹配模型的性能,例如基于神经网络的模型。它还用于中文自然语言处理的研究,例如文本匹配、文本分类和其他 NLP 任务。该数据集为研究人员提供了一个基准,用于评估其模型的性能并将其与最先进的方法进行比较。

  • 1.2代码部分

  • #读取LCQMC数据集,为方便运行,将数据集保存在本地文件夹
    data = pd.read_csv('LCQMC.test.data/LCQMC.test.data',
            sep='\t', names=['query1', 'query2', 'label'])
    
    #按照80%、10%、10%划分训练集、验证集和测试集
    train = data[:10000]
    valid = data[10000:11250]
    test = data[11250:12500]
    #查看数据集
    print("-------------------------数据集为-------------------------")
    print(data)
    
    #查看他们的形状
    print('数据集',data.shape)
    print('测试集',train.shape)
    print('验证集',valid.shape)
    print('测试集',test.shape)
    #查看数据类型
    print(type(data))
    print(train)

    Coggle 30 Days of ML(23年1月)打卡_第1张图片

     Coggle 30 Days of ML(23年1月)打卡_第2张图片

     Coggle 30 Days of ML(23年1月)打卡_第3张图片

  • 任务1结束

任务2:文本数据分析

2.1任务介绍

  • 步骤1:分析赛题文本长度,相似文本对与不相似文本对的文本长度是否存在差异?
  • 步骤2:分析赛题单词和字符个数,在所有文本中包含多少个单词(用jieba进行分析)和字符?

在LCQMC数据集中数据采用三列进行存储,其中label为是否含义相同的标签。在任务2中我们希望各位同学,能对中文文本进出初步的分析,找到相似文本对和不相似文本对的差异。

query1 query2 label
0 喜欢打篮球的男生喜欢什么样的女生 爱打篮球的男生喜欢什么样的女生 1
1 我手机丢了,我想换个手机 我想买个新手机,求推荐 1
2 大家觉得她好看吗 大家觉得跑男好看吗? 0

jieba是一个中文分词库,用于将中文句子分解为词组。它使用了基于前缀词典的最大匹配算法,并支持用户自定义词典。要使用Jieba库,首先需要安装它。使用 pip 可以轻松安装:

pip install jieba

安装完成后,可以使用下面的代码对句子进行分词:

import jieba
sentence = "我在学习使用jieba分词"
seg_list = jieba.cut(sentence)
print(" ".join(seg_list))

输出结果是:我 在 学习 使用 jieba 分词。还可以使用jieba.lcut() or jieba.lcut_for_search() 获取词组列表。

2.2代码部分

将字符串长度和长度差写入data

#ql = query len,lc = length 差
data.insert(data.shape[1], 'ql1', 0)
data.insert(data.shape[1], 'ql2', 0)
data.insert(data.shape[1], 'lc', 0)
for i in range(len(data)):
    data['ql1'][i] = len(data.query1[i])
    data['ql2'][i] = len(data.query2[i])
    data['lc'][i] = abs(len(data.query2[i]) - len(data.query1[i]))

将训练集按照标签划分两部分,将长度差计入程序 ,其中label为1的共5012个,label为4988个

label1 = train[train.label == 1]
label0 = train[train.label == 0]

print(label1)
print(label0)

#重新标号
label1.index = range(0,len(label1))
label0.index = range(0,len(label0))

print(label0)
print(label1)

#转化为列表
c1 = label1['lc'].values.tolist()
c0 = label0['lc'].values.tolist()
#print(c1)
#print(c0)

画图查看,开始查看整个训练集,发现数据过大,后筛选前一百个

fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
plt.plot(c1[:100],'g--')
ax2 = fig.add_subplot(1,2,2)
plt.plot(c0[:100],'k--')
#plt.show()

整体效果如下图所示: 

 Coggle 30 Days of ML(23年1月)打卡_第4张图片

 Coggle 30 Days of ML(23年1月)打卡_第5张图片

 发现看不出来什么区别,进行长度差统计,其中差别超过10的按10计算,差别从0到10,可得

虽然大致相同,但是随着差别越来越大,不相似的概率也越来越大。

对单词进行划分、计数,其代码为

#统计测试集中单词
CoSentence1 = train['query1'].drop_duplicates().values.tolist()
CoSentence2 = train['query2'].drop_duplicates().values.tolist()
CoSentence = CoSentence1 + CoSentence2
#print(CoSentense)

word2index = {}
word2count = {}
index2word = {}
n_words = 0
for pair in CoSentence:
    seg_list = jieba.cut(pair)
    for word in seg_list:
        if word not in word2index:
            word2index[word] = n_words
            word2count[word] = 1
            index2word[n_words] = word
            n_words += 1
        else:
            word2count[word] += 1
print(n_words)
print(word2index)
print('------------------------------------')
print(word2count)

Coggle 30 Days of ML(23年1月)打卡_第6张图片

构建字典成果,将9102个词组计入字典中:

Coggle 30 Days of ML(23年1月)打卡_第7张图片 接着是其出现的频率:

Coggle 30 Days of ML(23年1月)打卡_第8张图片

  • 任务2结束 

你可能感兴趣的:(自然语言处理,人工智能)