Intelligence artificielle

John Samuel
CPE Lyon

Year: 2021-2022
Email: john(dot)samuel(at)cpe(dot)fr

Creative Commons License

Apprentissage machine

Intelligence artificielle

Intelligence artificielle

Intelligence artificielle

Traitement automatique des langues

Intelligence artificielle

Traitement automatique des langues

Analyse de systèmes

Intelligence artificielle

Traitement automatique des langues

Racinisation [Frakes 2003]

Intelligence artificielle

Traitement automatique des langues

Racinisation: mesures d'évaluation [Frakes 2003]

Intelligence artificielle

Traitement automatique des langues

Racinisation: distance de Hamming [Frakes 2003]

  1. La distance de Hamming entre deux chaînes de longueur égale est définie comme le nombre de caractères des deux chaînes qui sont différents à la même position.
  2. Pour les chaînes de longueur inégale, ajouter la différence de longueur à la distance de Hamming pour obtenir une fonction de distance de Hamming modifiée \(d\)
  3. Exemples
    • tri: try, tried, trying
    • \(d\)(tri, try)= 1
    • \(d\)(tri, tried)= 2
    • \(d\)(tri, trying)= 4

Intelligence artificielle

Traitement automatique des langues

Racinisation: force [Frakes 2003]

  1. Le nombre moyen de mots par classe
  2. Facteur de compression de l'indice. Soit n est le nombre de mots dans le corpus et s est le nombre de racines. \[\frac{n - s}{n}\]
  3. Le nombre de mots et de racines qui diffèrent
  4. Le nombre moyen de caractères supprimés lors de la formation des racines
  5. La médiane et la moyenne de la distance de Hamming modifiée entre les mots et leur racine

Intelligence artificielle

Traitement automatique des langues

Racinisation: similarité [Frakes 2003]

  1. Soit \(A1\) et \(A2\) sont deux algorithmes
  2. Soit \(W\) une liste de mots et \(n\) le nombre de mots dans \(W\) \[ M(A1,A2,W) = \frac{n}{\Sigma d(x_i, y_i)}\]
  3. pour tous les mots \(w_i\) en W, \(x_i\) est le résultat de l'application de \(A1\) à \(w_i\) et \(y_i\) est le résultat de l'application de \(A2\) à \(w_i\)
  4. des algorithmes plus similaires auront des valeurs plus élevées de M

Intelligence artificielle

Traitement automatique des langues

Racinisation: ntlk

Intelligence artificielle

Traitement automatique des langues

Racinisation: Porter

from nltk.stem.porter import PorterStemmer

words = ["words", "eating", "went", "engineer", "tried"]
porter = PorterStemmer()
for word in words:
  print(porter.stem(word), end=' ')

Affichage

word eat went engin tri

Intelligence artificielle

Traitement automatique des langues

Racinisation: Snowball

from nltk.stem.snowball import SnowballStemmer

words = ["words", "eating", "went", "engineer", "tried"]

snowball = SnowballStemmer("english")
for word in words:
  print(snowball.stem(word))

Affichage

word eat went engin tri

Intelligence artificielle

Traitement automatique des langues

Étiquetage morpho-syntaxique [Màrquez 2000]

Intelligence artificielle

Étiquetage morpho-syntaxique [Màrquez 2000]

Construction de modèles linguistiques

  1. approche manuelle
    • constuction des règles)
  2. approche statistique
    • collection de n-grammes (bi-grammes, tri-grammes, ...)
    • ensemble de fréquences de cooccurrence
    • l'estimation de la probabilité d'une séquence de longueur n est calculée en tenant compte de son occurrence dans le corpus d'entraînement
  3. apprentissage machine

Intelligence artificielle

Étiquetage morpho-syntaxique

nltk: ngrams

from nltk import ngrams

sentence="He went to school yesterday and attended the classes"

for n in range(1,5):
  print("\n{}-grams".format(n))
  n_grams = ngrams(sentence.split(), n)
  for ngram in n_grams:
    print(ngram, end=" ")

Intelligence artificielle

Étiquetage morpho-syntaxique

nltk: ngrams

Affichage

1-grams
('He',) ('went',) ('to',) ('school',) ('yesterday',) ('and',) ('attended',) ('the',) ('classes',)
2-grams
('He', 'went') ('went', 'to') ('to', 'school') ('school', 'yesterday') ('yesterday', 'and') ('and', 'attended') ('attended', 'the') ('the', 'classes')
3-grams
('He', 'went', 'to') ('went', 'to', 'school') ('to', 'school', 'yesterday') ('school', 'yesterday', 'and') ('yesterday', 'and', 'attended') ('and', 'attended', 'the') ('attended', 'the', 'classes')
4-grams
('He', 'went', 'to', 'school') ('went', 'to', 'school', 'yesterday') ('to', 'school', 'yesterday', 'and') ('school', 'yesterday', 'and', 'attended') ('yesterday', 'and', 'attended', 'the') ('and', 'attended', 'the', 'classes')

Intelligence artificielle

Étiquetage morpho-syntaxique

nltk: pos_tag

from nltk import pos_tag, word_tokenize

sentence = "He goes to school daily"

tokens = word_tokenize(sentence)
print(pos_tag(tokens))

Affichage

[('He', 'PRP'), ('goes', 'VBZ'), ('to', 'TO'), ('school', 'NN'), ('daily', 'RB')]

Intelligence artificielle

nltk: pos_tag

[('He', 'PRP'), ('goes', 'VBZ'), ('to', 'TO'), ('school', 'NN'), ('daily', 'RB')]

Balise Signification
PRP pronoun, personal
VBZ verb, present tense, 3rd person singular
TO "to" as preposition
NN "noun, common, singular or mass
RB adverb

Intelligence artificielle

spaCy

Installation

$ pip3 install spacy
$ python3 -m spacy download en_core_web_sm

Installation

import spacy

nlp = spacy.load("en_core_web_sm")

Intelligence artificielle

Étiquetage morpho-syntaxique

spaCy

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("He goes to school daily")

for token in doc:
  print(token.text, token.pos_, token.dep_)

He PRON nsubj
goes VERB ROOT
to ADP prep
school NOUN pobj
daily ADV advmod

Intelligence artificielle

Étiquetage morpho-syntaxique

spaCy: mots vides, forme, PoS, lemme

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("He goes to school daily")

for token in doc:
  print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
    token.shape_, token.is_alpha, token.is_stop)

He -PRON- PRON PRP nsubj Xx True True
goes go VERB VBZ ROOT xxxx True False
to to ADP IN prep xx True True
school school NOUN NN pobj xxxx True False
daily daily ADV RB advmod xxxx True False

Intelligence artificielle

Traitement automatique des langues

Lemmatisation [Gesmundo 2012]

Intelligence artificielle

Traitement automatique des langues

Lemmatisation [Chrupała 2006, Gesmundo 2012]

Intelligence artificielle

Lemmatisation

nltk: WordNetLemmatizer

import nltk
nltk.download('punkt')
nltk.download('wordnet')
nltk.download('averaged_perceptron_tagger')

Intelligence artificielle

Lemmatisation

nltk: WordNetLemmatizer (sans les balises PoS)

from nltk.stem import WordNetLemmatizer

sentence = "He went to school yesterday and attended the classes"
lemmatizer = WordNetLemmatizer()

for word in sentence.split():
  print(lemmatizer.lemmatize(word), end=' ')

Affichage

He went to school yesterday and attended the class

Intelligence artificielle

Lemmatisation

nltk: WordNetLemmatizer (avec les balises PoS)

from nltk.stem import WordNetLemmatizer
from nltk import word_tokenize, pos_tag
from nltk.corpus import wordnet as wn

# Check the complete list of tags http://www.nltk.org/book/ch05.html
def wntag(tag):
  if tag.startswith("J"):
    return wn.ADJ
  elif tag.startswith("R"):
    return wn.ADV
  elif tag.startswith("N"):
    return wn.NOUN
  elif tag.startswith("V"):
    return wn.VERB
  return None

Intelligence artificielle

Lemmatisation

nltk: WordNetLemmatizer (avec les balises PoS)

lemmatizer = WordNetLemmatizer()

sentence = "I went to school today and he goes daily"
tokens = word_tokenize(sentence)
for token, tag in pos_tag(tokens):
  if wntag(tag):
    print(lemmatizer.lemmatize(token, wntag(tag)), end=' ')
  else:
    print(lemmatizer.lemmatize(token), end=' ')

Affichage

I go to school today and he go daily

Intelligence artificielle

Étiquetage morpho-syntaxique

spaCy: mots vides, forme, PoS, lemme

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("I went to school today and he goes daily")

for token in doc:
  print(token.lemma_, end=' ')

-PRON- go to school today and -PRON- go daily

Intelligence artificielle

Traitement automatique des langues

Morphologie

Intelligence artificielle

Morphologie

spaCy: mots vides, forme, PoS, lemme

import spacy
from spacy import displacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("He goes to school daily")

displacy.serve(doc, style="dep")

Intelligence artificielle

Traitement automatique des langues

Word Embeddings

Intelligence artificielle

Traitement automatique des langues

Word2Vec [Mikolov 2013]

Intelligence artificielle

Traitement automatique des langues

Word2Vec

Intelligence artificielle

Word2Vec

Context Bag of Words (CBOW)

Intelligence artificielle

Word2Vec

Skip grams

Intelligence artificielle

spaCy

Installation: modèle vectoriel plus large

$ python3 -m spacy download en_core_web_lg

Installation

import spacy

nlp = spacy.load("en_core_web_lg")

Intelligence artificielle

spaCy: similarity

import spacy

nlp = spacy.load("en_core_web_lg")
doc1 = nlp("dog")
doc2 = nlp("cat")
doc3 = nlp("apple")

print("similarity ({},{}): {} ".format(doc1.text, doc2.text, doc1.similarity(doc2)))
print("similarity ({},{}): {} ".format(doc2.text, doc3.text, doc2.similarity(doc3)))
print("similarity ({},{}): {} ".format(doc1.text, doc3.text, doc1.similarity(doc3)))

Affichage

similarity (dog,cat): 0.8016854705531046
similarity (cat,apple): 0.28213841802558415
similarity (dog,apple): 0.2633902481063797

Intelligence artificielle

spaCy: vector

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("cat")

for token in doc:
  print(token.vector)

Intelligence artificielle

Word Embeddings

gensim: cbow

import gensim
from nltk.tokenize import sent_tokenize, word_tokenize

data = "This is a class. This is a table"

sentences = []
for sentence in sent_tokenize(data):
  words = []
  for word in word_tokenize(sentence):
    words.append(word.lower())
  sentences.append(words)

Intelligence artificielle

Word Embeddings

gensim: cbow

# min_count: Ignorer tous les mots dont la fréquence totale est inférieure à cette valeur.
# window: Distance maximale entre le mot courant et le mot prédit dans une phrase
cbow = gensim.models.Word2Vec(sentences, min_count=1, size=100, window=3)

# afficher la valeur du vecteur
print(cbow.wv["this"])

# similarité entre deux mots
print(cbow.wv.similarity("this", "class"))

# prédire deux mots
print(cbow.predict_output_word(["is"], topn=2))

Intelligence artificielle

Word Embeddings

gensim: skip-gram

# min_count: Ignorer tous les mots dont la fréquence totale est inférieure à cette valeur.
# window: Distance maximale entre le mot courant et le mot prédit dans une phrase
# sg: 1 pour skip-gram ; sinon CBOW.
sgram = gensim.models.Word2Vec(sentences, min_count=1, size=100, window=5, sg=1)

# afficher la valeur du vecteur
print(sgram.wv["this"])

# similarité entre deux mots
print(sgram.wv.similarity("this", "class"))

# prédire deux mots
print(sgram.predict_output_word(["is"], topn=2))

Intelligence artificielle

Reconnaissance d'entités nommées

Extraire les entités nommées et les assigner à des catégories spécifiques.

Intelligence artificielle

spaCy: Reconnaissance d'entités nommées

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Paris is the capital of France. In 2015, its population was recorded as 2,206,488")

for entity in doc.ents:
  print(entity.text, entity.start_char, entity.end_char, entity.label_)

Paris 0 5 GPE
France 24 30 GPE
2015 35 39 DATE
2,206,488 72 81 CARDINAL

Intelligence artificielle

spaCy: Reconnaissance d'entités nommées

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Paris is the capital of France. In 2015, its population was recorded as 2,206,488")

displacy.serve(doc, style="ent")

Intelligence artificielle

spaCy: Reconnaissance d'entités nommées

Paris GPE is the capital of France GPE . In 2015 DATE , its population was recorded as 2,206,488 CARDINAL
Balise Signification
GPE Pays, villes, états.
DATE Dates ou périodes absolues ou relatives
CARDINAL Les chiffres qui ne correspondent à aucun autre type.

Intelligence artificielle

Analyse des sentiments

Installation

import nltk
nltk.download('vader_lexicon')

Usage

from nltk.sentiment.vader import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
sentiment = sia.polarity_scores("this movie is good")
print(sentiment)
sentiment = sia.polarity_scores("this movie is not very good")
print(sentiment)
sentiment = sia.polarity_scores("this movie is bad")
print(sentiment)

Intelligence artificielle

Analyse des sentiments

Affichage

{'neg': 0.0, 'neu': 0.508, 'pos': 0.492, 'compound': 0.4404}
{'neg': 0.344, 'neu': 0.656, 'pos': 0.0, 'compound': -0.3865}
{'neg': 0.538, 'neu': 0.462, 'pos': 0.0, 'compound': -0.5423}

Intelligence artificielle

Traduction automatique

Intelligence artificielle

Transformer

3. Intelligence artificielle

Système de recommandation

3. Intelligence artificielle

Système de recommandation

Réalisation [Pazzani 2007, Ricci 2011]

3. Intelligence artificielle

Système de recommandation

Fonctions [Ricci 2011]

3. Intelligence artificielle

Système de recommandation

Objectifs [Herlocker 2000, Ricci 2011]

3. Intelligence artificielle

Système de recommandation

Approches [Pazzani 2007, Ricci 2011]

3. Intelligence artificielle

Système de recommandation

Filtrage collaboratif

3. Intelligence artificielle

Système de recommandation

Filtrage basé sur le contenu [Pazzani 2007]

3. Intelligence artificielle

Système de recommandation

Systèmes hybrides [Gomez-Uribe 2016]

3. Intelligence artificielle

Système de recommandation

Mesures de performance [Ziegler 2005, Ricci 2011]

3. Intelligence artificielle

Système de recommandation

Domaines à haut risque [Herlocker 2000]

Intelligence artificielle

Représentation des connaissances et raisonnement

Intelligence artificielle

Web sémantique

Semantic Web Stack (https://commons.wikimedia.org/wiki/File:Semantic_web_stack.svg)

Intelligence artificielle

Moteur de règles

Intelligence artificielle

Programmation logique

Intelligence artificielle

Prolog

Intelligence artificielle

Prolog: types de données

Intelligence artificielle

Prolog: règles

Un programme Prolog contient des clauses de la forme suivante.

Tête : - Corps.

Intelligence artificielle

Prolog: faits

Une clause avec un corps vide est appelée fait.

cat(bob).
cat(alice).

Intelligence artificielle

Prolog: Installation

Sur une machine Ubuntu

$ sudo apt install gprolog

Intelligence artificielle

Prolog: GNU Prolog

$ prolog
GNU Prolog 1.4.5 (64 bits)
Compiled Feb 5 2017, 10:30:08 with gcc
By Daniel Diaz
Copyright (C) 1999-2016 Daniel Diaz
| ?- [user].
compiling user for byte code...
cat(tom).
cat(alice).

user compiled, 2 lines read - 241 bytes written, 12239 ms

(4 ms) yes
| ?-

Intelligence artificielle

Prolog: GNU Prolog: interrogation

?- cat(X).

X = tom ?

yes
| ?- cat(bob).

no

Intelligence artificielle

Prolog: GNU Prolog: interrogation

| ?- [user].
compiling user for byte code...
cat(tom).
cat(alice).
allcats(L) :- findall(X, cat(X), L).

user compiled, 3 lines read - 490 bytes written, 10638 ms

yes
| ?- allcats(L).

L = [tom,alice]

yes

Intelligence artificielle

Prolog: GNU Prolog: interrogation

| ?- [user].
compiling user for byte code...
friend(bob, alice).
friend(alice, kevin).
friend(bob, thomas).
friend(bob, peter).

user compiled, 4 lines read - 486 bytes written, 77256 ms

(10 ms) yes
| ?- friend(bob, X).

X = alice ? a

X = thomas

X = peter

(1 ms) yes

Intelligence artificielle

Prolog: GNU Prolog: interrogation

			
$ cat friend.pl
friend(bob, alice).
friend(alice, kevin).
friend(bob, thomas).
friend(bob, peter).
human(X):-friend(X,_).
human(Y):-friend(_,Y).
                        
			

Intelligence artificielle

Prolog: GNU Prolog: interrogation

			
$ prolog --consult-file friend.pl
GNU Prolog 1.4.5 (64 bits)
Compiled Feb 23 2020, 20:14:50 with gcc
By Daniel Diaz
Copyright (C) 1999-2020 Daniel Diaz
compiling /home/user/friend.pl for byte code...
/home/user/friend.pl compiled, 4 lines read - 515 bytes written, 22 ms
| ?- friend(bob,alice).

true ?

yes
                        
			

Intelligence artificielle

Prolog: GNU Prolog: interrogation

			
$ prolog --consult-file friend.pl
| ?- human(X).
X = bob ? a
X = alice
X = bob
X = bob
X = alice
X = kevin
X = thomas
X = peter

yes
| ?-
                        
			

Références

Articles de recherche

Références

Articles de recherche

Références

Articles de recherche

Références

Web

Références:

Couleurs

Images