L'action `crfTrain` est utilisée pour entraîner un modèle de Champs Aléatoires Conditionnels (CRF). Les CRF sont une classe de méthodes de modélisation statistique souvent appliquées dans la reconnaissance de formes et l'apprentissage automatique, utilisées pour l'étiquetage séquentiel de données. Cette action est fondamentale pour les tâches de traitement du langage naturel telles que la reconnaissance d'entités nommées (NER), où l'objectif est d'attribuer une étiquette (par exemple, Personne, Organisation, Lieu) à chaque mot d'une séquence de texte.
| Paramètre | Description |
|---|---|
| model | Spécifie les tables de modélisation de sortie qui contiendront les différents composants du modèle CRF entraîné (attributs, caractéristiques, étiquettes, etc.). |
| nloOpts | Spécifie les options pour l'optimiseur non linéaire utilisé pendant l'entraînement du modèle. Cela inclut le choix de l'algorithme (par exemple, LBFGS, SGD), les paramètres de régularisation, les critères d'arrêt et les options d'impression. |
| table | Spécifie la table CAS d'entrée contenant les données d'entraînement. Cette table doit inclure les séquences de texte et leurs étiquettes correspondantes. |
| target | Spécifie le nom de la colonne dans la table d'entrée qui contient les étiquettes de séquence (la variable à prédire). |
| template | Spécifie le modèle textuel utilisé pour définir les caractéristiques à extraire des données d'entrée. Le modèle définit les motifs et les contextes (par exemple, les mots environnants, les préfixes/suffixes) qui seront utilisés pour l'entraînement. |
Ce bloc de code SAS crée une table CAS nommée `mycas.ner_data`. Cette table contient des phrases simples et les étiquettes correspondantes pour une tâche de reconnaissance d'entités nommées (NER). La colonne `text` contient la phrase, et la colonne `target` contient les étiquettes de séquence, où 'B-PER' marque le début d'une personne et 'B-LOC' le début d'un lieu. 'O' signifie 'Outside' (en dehors de toute entité). Ces données serviront d'entrée pour entraîner le modèle CRF.
| 1 | DATA mycas.ner_data; |
| 2 | LENGTH text $200 target $200; |
| 3 | INFILE DATALINES delimiter='|'; |
| 4 | INPUT text $ target $; |
| 5 | DATALINES; |
| 6 | John Doe is a software engineer.|B-PER I-PER O O O O |
| 7 | He lives in New York.|O O O B-LOC I-LOC |
| 8 | Alice works for SAS.|B-PER O O B-ORG |
| 9 | ; |
| 10 | RUN; |
Cet exemple montre comment effectuer un entraînement de base d'un modèle CRF. Il utilise la table `ner_data` comme entrée, spécifie `target` comme la colonne d'étiquettes et définit un modèle de caractéristiques simple (`U:w[0]`) qui n'utilise que le mot actuel. Le modèle entraîné sera sauvegardé dans un ensemble de tables préfixées par `crf_model` dans la caslib `mycas`.
| 1 | PROC CAS; |
| 2 | conditionalRandomFields.crfTrain / |
| 3 | TABLE={name='ner_data', caslib='mycas'}, |
| 4 | target='target', |
| 5 | template='U:w[0]', |
| 6 | model={name='crf_model', caslib='mycas', replace=true}; |
| 7 | RUN; |
| 8 | QUIT; |
Cet exemple illustre un entraînement plus complexe. Il utilise un modèle de caractéristiques plus riche, incluant le mot actuel ainsi que les mots précédent et suivant. Il configure l'optimiseur L-BFGS avec 10 corrections et une méthode de recherche linéaire de Wolfe. Des régularisations L1 (0.1) et L2 (0.05) sont appliquées pour prévenir le surajustement. Le nombre maximum d'itérations est fixé à 100, et le journal d'itération sera imprimé tous les 5 pas pour un suivi détaillé.
| 1 | PROC CAS; |
| 2 | conditionalRandomFields.crfTrain / |
| 3 | TABLE={name='ner_data', caslib='mycas'}, |
| 4 | target='target', |
| 5 | template='U:w[0] |
| 6 | U:w[-1] |
| 7 | U:w[1]', |
| 8 | model={name='crf_model_advanced', caslib='mycas', replace=true}, |
| 9 | nloOpts={ |
| 10 | algorithm='LBFGS', |
| 11 | lbfgsOpt={numCorrections=10, lineSearchMethod='WOLFE'}, |
| 12 | optmlOpt={regL1=0.1, regL2=0.05, maxIters=100}, |
| 13 | printOpt={printLevel='PRINTDETAIL', printFreq=5} |
| 14 | }; |
| 15 | RUN; |
| 16 | QUIT; |