英文

希腊自然语言推理(文本蕴含)和零射击分类的交叉编码器

由希腊陆军学院(SSE)和克里特技术大学(TUC)开发

该模型使用 SentenceTransformers Cross-Encoder 类进行训练。

训练数据

该模型是在AllNLI数据集( SNLI MultiNLI 之和的希腊+英语版本)上进行训练的。希腊部分是使用可用的EN2EL NMT模型( here )创建的。

模型可以通过两种方式使用:

  • NLI/文本蕴涵:对于给定的句子对,它将输出对应于标签的三个分数:矛盾、蕴涵、中性。
  • 通过Huggingface流水线进行零射击分类:给定一个句子和一组标签/主题,它将输出句子属于每个主题的可能性。在内部,句子和每个标签之间蕴涵的对数似然被视为候选标签有效的对数似然。

性能

在混合(希腊+英语)AllNLI-dev数据集上的分类准确性评估(蕴涵、矛盾、中性):

Metric Value
Accuracy 0.8409

如何使用该模型进行NLI/文本蕴涵

与sentence_transformers一起使用

预训练模型可按以下方式使用:

from sentence_transformers import CrossEncoder
model = CrossEncoder('lighteternal/nli-xlm-r-greek')
scores = model.predict([('Δύο άνθρωποι συναντιούνται στο δρόμο', 'Ο δρόμος έχει κόσμο'),
                        ('Ένα μαύρο αυτοκίνητο ξεκινάει στη μέση του πλήθους.', 'Ένας άντρας οδηγάει σε ένα μοναχικό δρόμο'), 
                        ('Δυο γυναίκες μιλάνε στο κινητό', 'Το τραπέζι ήταν πράσινο')])


#Convert scores to labels
label_mapping = ['contradiction', 'entailment', 'neutral']
labels = [label_mapping[score_max] for score_max in scores.argmax(axis=1)]
print(scores, labels)

# Οutputs
#[[-3.1526504  2.9981945 -0.3108107]
# [ 5.0549307 -2.757949  -1.6220676]
# [-0.5124733 -2.2671669  3.1630592]] ['entailment', 'contradiction', 'neutral']
与Transformers AutoModel一起使用

您还可以直接使用Transformers库中的模型(不使用SentenceTransformers库):

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model = AutoModelForSequenceClassification.from_pretrained('lighteternal/nli-xlm-r-greek')
tokenizer = AutoTokenizer.from_pretrained('lighteternal/nli-xlm-r-greek')

features = tokenizer(['Δύο άνθρωποι συναντιούνται στο δρόμο', 'Ο δρόμος έχει κόσμο'], 
                    ['Ένα μαύρο αυτοκίνητο ξεκινάει στη μέση του πλήθους.', 'Ένας άντρας οδηγάει σε ένα μοναχικό δρόμο.'],  
                    padding=True, truncation=True, return_tensors="pt")

model.eval()
with torch.no_grad():
    scores = model(**features).logits
    label_mapping = ['contradiction', 'entailment', 'neutral']
    labels = [label_mapping[score_max] for score_max in scores.argmax(dim=1)]
    print(labels)

如何使用该模型进行零射击分类

该模型也可用于零射击分类:

from transformers import pipeline

classifier = pipeline("zero-shot-classification", model='lighteternal/nli-xlm-r-greek')

sent = "Το Facebook κυκλοφόρησε τα πρώτα «έξυπνα» γυαλιά επαυξημένης πραγματικότητας"
candidate_labels = ["πολιτική", "τεχνολογία", "αθλητισμός"]
res = classifier(sent, candidate_labels)
print(res)

#outputs:
#{'sequence': 'Το Facebook κυκλοφόρησε τα πρώτα «έξυπνα» γυαλιά επαυξημένης πραγματικότητας', 'labels': ['τεχνολογία', 'αθλητισμός', 'πολιτική'], 'scores': [0.8380699157714844, 0.09086982160806656, 0.07106029987335205]}

致谢

研究工作获得了希腊研究与创新基金会(HFRI)提供的HFRI博士奖学金资助(奖学金号:50,第2次申请)

引用信息

希腊模型的引用待定。基于工作 Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks 实施。感谢@nreimers(Nils Reimers)在Github上的支持。