摘要:距離杰卡德系數(shù)用于比較有限樣本集之間的相似性與差異性。將字中間加入空格轉(zhuǎn)化為矩陣求交集求并集計(jì)算杰卡德系數(shù)你在干啥呢你在干什么呢計(jì)算計(jì)算矩陣中兩個向量的相似度,即求解兩個向量夾角的余弦值。
Edit Distance
計(jì)算兩個字符串之間,由一個轉(zhuǎn)成另一個所需要的最少編輯次數(shù),次數(shù)越多,距離越大,也就越不相關(guān)。比如,“xiaoming”和“xiamin”,兩者的轉(zhuǎn)換需要兩步:
去除‘o’
去除‘g’
所以,次數(shù)/距離=2。
!pip install distance
import distance def edit_distance(s1, s2): return distance.levenshtein(s1, s2) s1 = "xiaoming" s2 = "xiamin" print("距離:"+str(edit_distance(s1, s2)))杰卡德系數(shù)
用于比較有限樣本集之間的相似性與差異性。Jaccard 系數(shù)值越大,樣本相似度越高,計(jì)算方式是:兩個樣本的交集除以并集。
from sklearn.feature_extraction.text import CountVectorizer import numpy as np def jaccard_similarity(s1, s2): def add_space(s): return " ".join(list(s)) # 將字中間加入空格 s1, s2 = add_space(s1), add_space(s2) # 轉(zhuǎn)化為TF矩陣 cv = CountVectorizer(tokenizer=lambda s: s.split()) corpus = [s1, s2] vectors = cv.fit_transform(corpus).toarray() # 求交集 numerator = np.sum(np.min(vectors, axis=0)) # 求并集 denominator = np.sum(np.max(vectors, axis=0)) # 計(jì)算杰卡德系數(shù) return 1.0 * numerator / denominator s1 = "你在干啥呢" s2 = "你在干什么呢" print(jaccard_similarity(s1, s2))TF 計(jì)算
計(jì)算矩陣中兩個向量的相似度,即:求解兩個向量夾角的余弦值。
計(jì)算公式:cosθ=a·b/|a|*|b|
from sklearn.feature_extraction.text import CountVectorizer import numpy as np from scipy.linalg import norm def tf_similarity(s1, s2): def add_space(s): return " ".join(list(s)) # 將字中間加入空格 s1, s2 = add_space(s1), add_space(s2) # 轉(zhuǎn)化為TF矩陣 cv = CountVectorizer(tokenizer=lambda s: s.split()) corpus = [s1, s2] vectors = cv.fit_transform(corpus).toarray() # 計(jì)算TF系數(shù) return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1])) s1 = "你在干啥呢" s2 = "你在干什么呢" print(tf_similarity(s1, s2))高階模型Bert
Bert的內(nèi)部結(jié)構(gòu),請查看從word2vec到bert這篇文章,本篇文章我們只講代碼實(shí)現(xiàn)。我們可以下載Bert模型源碼,或者使用TF-HUB的方式使用,本次我們使用下載源碼的方式。
首先,從Github下載源碼,然后下載google預(yù)訓(xùn)練好的模型,我們選擇Bert-base Chinese。
預(yù)模型下載后解壓,文件結(jié)構(gòu)如圖:
vocab.txt是訓(xùn)練時中文文本采用的字典,bert_config.json是BERT在訓(xùn)練時,可選調(diào)整的一些參數(shù)。其它文件是模型結(jié)構(gòu),參數(shù)等文件。
準(zhǔn)備數(shù)據(jù)集 修改 processorclass MoveProcessor(DataProcessor): """Processor for the move data set .""" def get_train_examples(self, data_dir): """See base class.""" return self._create_examples( self._read_tsv(os.path.join(data_dir, "train.tsv")), "train") def get_dev_examples(self, data_dir): """See base class.""" return self._create_examples( self._read_tsv(os.path.join(data_dir, "dev.tsv")), "dev") def get_test_examples(self, data_dir): """See base class.""" return self._create_examples( self._read_tsv(os.path.join(data_dir, "test.tsv")), "test") def get_labels(self): """See base class.""" return ["0", "1"] @classmethod def _read_tsv(cls, input_file, quotechar=None): """Reads a tab separated value file.""" with tf.gfile.Open(input_file, "r") as f: reader = csv.reader(f, delimiter=" ", quotechar=quotechar) lines = [] for line in reader: lines.append(line) return lines def _create_examples(self, lines, set_type): """Creates examples for the training and dev sets.""" examples = [] for (i, line) in enumerate(lines): guid = "%s-%s" % (set_type, i) if set_type == "test": text_a = tokenization.convert_to_unicode(line[0]) label = "0" else: text_a = tokenization.convert_to_unicode(line[1]) label = tokenization.convert_to_unicode(line[0]) examples.append( InputExample(guid=guid, text_a=text_a, text_b=None, label=label)) return examples修改 processor字典
def main(_): tf.logging.set_verbosity(tf.logging.INFO) processors = { "cola": ColaProcessor, "mnli": MnliProcessor, "mrpc": MrpcProcessor, "xnli": XnliProcessor, "setest":MoveProcessor }Bert模型訓(xùn)練
export BERT_BASE_DIR=/Users/xiaomingtai/Downloads/chinese_L-12_H-768_A-12 export MY_DATASET=/Users/xiaomingtai/Downloads/bert_model python run_classifier.py --data_dir=$MY_DATASET --task_name=setest --vocab_file=$BERT_BASE_DIR/vocab.txt --bert_config_file=$BERT_BASE_DIR/bert_config.json --output_dir=/Users/xiaomingtai/Downloads/ber_model_output/ --do_train=true --do_eval=true --do_predict=true --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt --max_seq_length=128 --train_batch_size=16 --eval_batch_size=8 --predict_batch_size=2 --learning_rate=5e-5 --num_train_epochs=3.0Bert模型訓(xùn)練結(jié)果
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19957.html
摘要:新問題拋出有沒有一種簽名算法,如果文本非常相似,簽名值也非常相似呢二文本相似性的簽名算法上文提出的問題,可以用局部敏感哈希解決,局部敏感哈希是一類文本越相似,哈希值越相似的算法,有興趣的同學(xué)自行百度,這里分享一下的思路。 緣起:(1)原創(chuàng)不易,互聯(lián)網(wǎng)抄襲成風(fēng),很多原創(chuàng)內(nèi)容在網(wǎng)上被抄來抄去,改來改去(2)百度的網(wǎng)頁庫非常大,爬蟲如何判斷一個新網(wǎng)頁是否與網(wǎng)頁庫中已有的網(wǎng)頁重復(fù)呢?這是本文要...
摘要:距離杰卡德系數(shù)用于比較有限樣本集之間的相似性與差異性。將字中間加入空格轉(zhuǎn)化為矩陣求交集求并集計(jì)算杰卡德系數(shù)你在干啥呢你在干什么呢計(jì)算計(jì)算矩陣中兩個向量的相似度,即求解兩個向量夾角的余弦值。 Edit Distance 計(jì)算兩個字符串之間,由一個轉(zhuǎn)成另一個所需要的最少編輯次數(shù),次數(shù)越多,距離越大,也就越不相關(guān)。比如,xiaoming和xiamin,兩者的轉(zhuǎn)換需要兩步: 去除‘o’ 去除...
摘要:在自然語言處理中,一個很重要的技術(shù)手段就是將文檔轉(zhuǎn)換為一個矢量,這個過程一般是使用這個庫進(jìn)行處理的。自然語言處理中,一般來說,代表詞。自然語言預(yù)處理中,一個很重要的步驟就是將你收集的句子進(jìn)行分詞,將一個句子分解成詞的列表。 前言 本文根據(jù)實(shí)際項(xiàng)目撰寫,由于項(xiàng)目保密要求,源代碼將進(jìn)行一定程度的刪減。本文撰寫的目的是進(jìn)行公司培訓(xùn),請勿以任何形式進(jìn)行轉(zhuǎn)載。由于是日語項(xiàng)目,用到的分詞軟件等,在...
閱讀 742·2021-07-25 21:37
閱讀 3654·2019-08-30 15:55
閱讀 2572·2019-08-30 15:54
閱讀 1717·2019-08-30 15:44
閱讀 3123·2019-08-30 15:44
閱讀 859·2019-08-30 15:43
閱讀 1024·2019-08-29 15:36
閱讀 3038·2019-08-29 10:58