目录
引言
文本预处理
数据收集
编辑编辑
文本清洗
词向量的训练
Word2Vec 的两种主要模型
Word2Vec 的工作原理
训练过程
Word2Vec 的应用
训练模型
建立银行应用金融科技的关键词词库
关键词
计算余弦相似度
统计关键词词频
引言
随着金融科技的迅猛发展,其在银行业的应用日益广泛且深入,成为推动银行业数字化转型的重要力量。金融科技不仅改变了传统银行的业务模式和服务方式,还极大地提升了银行的服务效率、风险管理能力和客户体验。因此,准确评估各上市银行在金融科技领域的发展程度,对于理解银行业未来的发展趋势、制定有效的战略决策具有重要意义。
本文旨在通过语义挖掘技术,对上市银行的年报信息进行深入分析,以金融科技相关的关键词为切入点,计算这些关键词词向量的余弦相似性,从而量化衡量各银行在金融科技领域的投入与成效。词向量是自然语言处理中的一项关键技术,它能够将词汇映射到高维向量空间中,使得语义上相似的词汇在向量空间中的位置也相近。通过计算词向量的余弦相似性,我们可以评估不同银行年报中金融科技相关内容的相似度,进而推断出各银行在金融科技领域的发展水平和差异。
具体而言,我们将首先收集并整理上市银行的年报信息,然后利用自然语言处理工具提取金融科技相关的关键词。接下来,采用先进的词嵌入模型(如Word2Vec、BERT等)训练得到这些关键词的词向量。随后,计算各银行年报中金融科技关键词词向量的平均余弦相似性,以此作为衡量银行金融科技发展程度的量化指标。
通过这种方法,我们不仅能够揭示各银行在金融科技领域的相对位置和竞争优势,还能够为银行业金融机构提供有价值的参考信息,帮助其更好地把握金融科技的发展趋势,制定符合自身特点的数字化转型战略。同时,本文的研究也将为学术界和业界探讨金融科技对银行业的影响提供新的视角和思路。
文本预处理
数据收集
首先,需要收集各家上市银行的年报信息。可以通过访问银行官方网站或财经数据提供商获取。
年报通常位于各大银行官网的投资者关系里
文本清洗
- 分词:使用中文分词工具(如jieba、HanLP等)对年报文本进行分词。
- 去除标点和停用词:通过正则表达式或其他工具去除文本中的标点符号和停用词(如“的”、“了”、“在”等常见但无实际意义的词汇)。
- 文本提取:提取出年报中描述银行经营情况的文本部分,这可能需要一些手动筛选或使用正则表达式来定位特定章节。
# 加载停用词列表
with open("./stop_words.gb18030.txt", encoding='gb18030') as f:stopword_list = set(line.strip() for line in f.readlines())
# 文本预处理:分词、去除标点和停用词seg_list = jieba.cut(text, cut_all=False)filtered_words = [word for word in seg_list if word not in stopword_list and word.strip().isalnum()]filtered_text = ' '.join(filtered_words)
常见的停用词列表如下:
中文停用词表; 哈工大停用词表; 百度停用词表; 机器智能实验室停用词库
链接:https://pan.baidu.com/s/1wb3CdvL-OOWsveKzfkG8og?pwd=0oq7 提取码:0oq7
词向量的训练
Word2Vec 是一种广泛使用的词嵌入方法,它能够将词汇表中的单词或短语映射到高维向量空间中,使得语义上相似的单词在向量空间中的位置也相近。这种方法由 Mikolov 等人在 2013 年提出,并因其高效性和有效性而迅速在自然语言处理(NLP)领域流行开来。
Word2Vec 的两种主要模型
Word2Vec 主要有两种实现方式:Skip-Gram 和 CBOW(Continuous Bag of Words)。
- Skip-Gram:
- 在 Skip-Gram 模型中,目标是使用当前词来预测其上下文(即周围的词)。
- 具体来说,给定一个中心词(center word),模型的目标是最大化从该中心词生成其上下文词(context words)的概率。
- 这种方法在训练稀有词时通常更有效,因为即使这些词出现的次数很少,也可以通过观察它们的上下文来学习它们的有效表示。
- CBOW:
- 与 Skip-Gram 相反,CBOW 模型使用上下文词来预测中心词。
- 它通过取上下文词的向量表示的平均值(或加权平均值),然后使用这个平均值来预测中心词。
- CBOW 通常比 Skip-Gram 更快且更容易训练,特别是在大规模数据集上,但在处理罕见词时可能不如 Skip-Gram 有效。
Word2Vec 的工作原理
- 输入层:接收一个词的索引(通常是在词汇表中的位置),并将其转换为独热编码(one-hot encoding)。
- 隐藏层:这个层没有激活函数,实际上它只是一个查找表,将每个词的独热编码映射到一个密集的向量表示(即词向量)。
- 输出层:在 Skip-Gram 中,输出层是一个 softmax 层,用于预测给定中心词的上下文词。在 CBOW 中,输出层也是 softmax 层,但用于预测中心词本身。
训练过程
- 使用反向传播算法和梯度下降(或其变体,如随机梯度下降 SGD)来训练模型。
- 在训练过程中,模型会调整隐藏层的权重(即词向量),以最小化预测错误。
- 随着训练的进行,语义上相似的词会逐渐在向量空间中聚集在一起。
Word2Vec 的应用
Word2Vec 生成的词向量在多种 NLP 任务中都非常有用,包括但不限于:
- 文本分类
- 情感分析
- 命名实体识别
- 机器翻译
- 问答系统
- 语义相似度计算
通过 Word2Vec,我们可以将文本数据转换为数值形式,从而能够利用机器学习算法来处理和分析这些数据。这种方法不仅提高了自然语言处理任务的准确性,还大大简化了特征工程的过程。
训练模型
- 数据准备:将清洗后的文本转换为适合Word2Vec模型输入的格式(通常是词列表)。
- 参数设置:设置Word2Vec模型的参数,如向量维度(size)、窗口大小(window)、最小词频(min_count)等。
- 训练:使用年报文本数据训练Word2Vec模型。
import os
import re
import jieba
from gensim.models import Word2Vecbase_dir = 'data'
sentences = []# 遍历文件夹和文件
for root, dirs, files in os.walk(base_dir):for file in files:if file.endswith('.txt'):file_path = os.path.join(root, file)with open(file_path, 'r', encoding='utf-8') as f:content = f.read()# 使用正则表达式去除单个字母和数字cleaned_content = re.sub(r'\b[a-zA-Z0-9]\b', '', content)# 使用jieba进行分词words = list(jieba.cut(cleaned_content, cut_all=False))# 使用分词结果作为句子sentences.append(words)# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=200, window=5, min_count=10, workers=4)# 保存模型
model_name = "bank_word2vec_model.model"
model.save(model_name)
建立银行应用金融科技的关键词词库
关键词
数字化', '智能', '互联网', '线上', '智能化', '供应链', '在线', '人工智能', '自动化',
'网银', '网上银行', '电商', '网上', '数据中心', '机器人', '分布式', '电子化', '5G',
'电子商务', '开放平台', '数据挖掘', '人脸识别', '网络化', 'O2O', 'B2B', '云端', '上云',
'云化', '数据模型', '智慧型', '网上支付', '数据仓库', '量子', 'B2C', '数据共享', '声纹识别',
'C2B', '人机交互', 'C2C', '虚拟化', '程序接口', '神经网络', '网上交易', '仿真',
'虚拟现实', '模式识别'
计算余弦相似度
- 词向量查询:使用训练好的Word2Vec模型查询每个关键词的词向量。
- 计算相似度:利用词向量的余弦相似度来度量关键词之间的关联性。余弦相似度可以通过
numpy
库中的cosine
函数计算。
from gensim.models import Word2Vec
# 加载Word2Vec模型
model_path = "bank_word2vec_model.model"
model = Word2Vec.load(model_path)# 定义关键词库
keywords = ['数字化', '智能', '互联网', '线上', '智能化', '供应链', '在线', '人工智能', '自动化','网银', '网上银行', '电商', '网上', '数据中心', '机器人', '分布式', '电子化', '5G','电子商务', '开放平台', '数据挖掘', '人脸识别', '网络化', 'O2O', 'B2B', '云端', '上云','云化', '数据模型', '智慧型', '网上支付', '数据仓库', '量子', 'B2C', '数据共享', '声纹识别','C2B', '人机交互', 'C2C', '虚拟化', '程序接口', '神经网络', '网上交易', '仿真','虚拟现实', '模式识别'
]from sklearn.metrics.pairwise import cosine_similarity
import osdef print_similarities_to_file(keywords, model, output_file):with open(output_file, 'w', encoding='utf-8') as f:for i in range(len(keywords)):for j in range(i + 1, len(keywords)):word1, word2 = keywords[i], keywords[j]if word1 in model.wv and word2 in model.wv:sim = cosine_similarity(model.wv[word1].reshape(1, -1), model.wv[word2].reshape(1, -1))[0][0]f.write(f"{word1} 和 {word2} 的余弦相似度为: {sim:.4f}\n")output_file = 'similarities.txt'# 调用修改后的函数
print_similarities_to_file(keywords, model, output_file)# 验证文件是否已创建
if os.path.exists(output_file):print(f"余弦相似度已成功导出到文件:{output_file}")
else:print("导出文件时出现问题,请检查代码和文件路径。")
统计关键词词频
import os
import jieba
import collections
import pandas as pd
import re# 设置文件夹路径
base_dir = 'data'# 用于存储所有文件的词频
word_freq = collections.Counter()def is_valid_word(word):# 排除空格、单个字符、数字等if len(word) == 1 or word.isdigit() or not re.match(r'[\u4e00-\u9fa5]+', word): # 只保留中文字符return Falsereturn True# 遍历文件夹和文件
for root, dirs, files in os.walk(base_dir):for file in files:if file.endswith('.txt'):file_path = os.path.join(root, file)with open(file_path, 'r', encoding='utf-8') as f:content = f.read()# 使用jieba进行分词words = jieba.cut(content, cut_all=False)# 筛选有效的词语并更新全局词频计数器for word in words:if is_valid_word(word):word_freq.update([word])# 对词频进行排序,这里选择前1000个高频词
top_words = word_freq.most_common(1000)# 将高频词及其词频转换为DataFrame
df = pd.DataFrame(top_words, columns=['Word', 'Frequency'])# 写入Excel文件
df.to_excel('words.xlsx', index=False)