Description

BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,由Google在2018年提出。它基于Transformer架构,并通过在大规模文本语料上进行无监督训练来学习通用的语言表示。

BERT的主要特点是双向性(Bidirectional),它能够同时利用上下文信息来理解单词的含义。传统的语言模型(如GPT)只能根据前面的单词来预测下一个单词,而BERT可以同时考虑前面和后面的单词,从而更好地捕捉上下文信息。

BERT的训练过程包括两个阶段:预训练和微调。在预训练阶段,BERT使用大规模的无标签文本数据来学习语言表示。它通过掩码语言建模(Masked Language Modeling)和下一句预测(Next Sentence Prediction)任务来训练模型。在掩码语言建模任务中,BERT会随机掩盖输入句子中的一些单词,然后预测这些被掩盖的单词。在下一句预测任务中,BERT会判断两个句子是否是连续的。

在微调阶段,BERT的预训练模型会在特定的下游任务上进行微调,例如文本分类、命名实体识别、问答等。通过微调,BERT可以根据具体任务的标注数据来调整模型参数,使其更好地适应特定任务的要求。

BERT在自然语言处理领域取得了重大的突破,它在多项基准测试中取得了领先的性能。由于BERT能够学习到通用的语言表示,它可以应用于各种文本处理任务,包括文本分类、命名实体识别、情感分析、机器翻译等。

我们使用BERT的向量化功能,将各种dockerhub上的description转化为向量并进行bi-Kmeans聚类分析。

Resources

Environments

  • Windows11 Professional x64
  • Python 3.10(Global)

Reqiurements

  • Python 3.6 or 3.7
  • Tensorflow==1.15.0

Installations

Install & Configure Venv

To create an isolated and clean environment, we use acconda to create venv.

  1. Download acconda at https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive
  2. Install
  3. Add installation path to PATH: setx PATH "%PATH%;C:\path\to\anaconda"
  4. Setup a venv: conda create -n venv python=3.7
  5. Use tsinghua mirror to acclerate downloading: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn
  6. Activate venv: activate venv
  7. Test: python --version and pip --version

Install Dependencies

  1. Config pip mirror: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  2. Install Tensorflow==1.15.0: pip install tensorflow==1.15.0
  3. python安装模块的时候出现了不能连接的问题:after connection broken by ‘ProxyError’: 关掉梯子
  4. 踩坑:python - TypeError: Descriptors cannot not be created directly - Stack Overflow
  5. Install service:pip install bert-serving-client bert-serving-server
  6. Download pre-trained model at https://github.com/google-research/bert
  7. Activate server:bert-serving-start -model_dir v:\Dev\metadata-analysis-framework\BERT_model -num_worker=1

Test

1
2
3
4
5
6
7
from bert_serving.client import BertClient #导入客户端

bc = BertClient() # 创建客户端对象

result = bc.encode(['你好', '我来自中国', '中国是一个历史悠久、文化底蕴深厚的国家'])

print(result.shape) # 查看输出结果shape