国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

4種方法計(jì)算句子相似度

用戶83 / 1071人閱讀

摘要:距離杰卡德系數(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ù)集

修改 processor
class 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.0

Bert模型訓(xùn)練結(jié)果

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19957.html

相關(guān)文章

  • 咋做長文本去重

    摘要:新問題拋出有沒有一種簽名算法,如果文本非常相似,簽名值也非常相似呢二文本相似性的簽名算法上文提出的問題,可以用局部敏感哈希解決,局部敏感哈希是一類文本越相似,哈希值越相似的算法,有興趣的同學(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ù)呢?這是本文要...

    coordinate35 評論0 收藏0
  • 4方法計(jì)算句子相似

    摘要:距離杰卡德系數(shù)用于比較有限樣本集之間的相似性與差異性。將字中間加入空格轉(zhuǎn)化為矩陣求交集求并集計(jì)算杰卡德系數(shù)你在干啥呢你在干什么呢計(jì)算計(jì)算矩陣中兩個向量的相似度,即求解兩個向量夾角的余弦值。 Edit Distance 計(jì)算兩個字符串之間,由一個轉(zhuǎn)成另一個所需要的最少編輯次數(shù),次數(shù)越多,距離越大,也就越不相關(guān)。比如,xiaoming和xiamin,兩者的轉(zhuǎn)換需要兩步: 去除‘o’ 去除...

    timger 評論0 收藏0
  • 自然語言處理真實(shí)項(xiàng)目實(shí)戰(zhàn)

    摘要:在自然語言處理中,一個很重要的技術(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)目,用到的分詞軟件等,在...

    王巖威 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<