huggingface/CodeBERTa-language-id
huggingface
Clasificaci贸n de texto
CodeBERTa-language-id: El algoritmo de identificaci贸n de lenguajes de programaci贸n m谩s elegante del mundo 馃く. Para demostrar la utilidad de nuestro modelo preentrenado CodeBERTa en tareas posteriores m谩s all谩 del modelado de lenguajes, afinamos el punto de control CodeBERTa-small-v1 en la tarea de clasificar una muestra de c贸digo en el lenguaje de programaci贸n en el que est谩 escrito (identificaci贸n de lenguaje de programaci贸n). A帽adimos una cabeza de clasificaci贸n secuencial en la parte superior del modelo. En el conjunto de datos de evaluaci贸n, alcanzamos una precisi贸n de evaluaci贸n y un F1 > 0.999, lo cual no es sorprendente dado que la tarea de identificaci贸n de lenguajes es relativamente f谩cil (ver intuici贸n m谩s abajo).
Como usar
CODEBERTA_LANGUAGE_ID = "huggingface/CodeBERTa-language-id"
tokenizer = RobertaTokenizer.from_pretrained(CODEBERTA_LANGUAGE_ID)
model = RobertaForSequenceClassification.from_pretrained(CODEBERTA_LANGUAGE_ID)
input_ids = tokenizer.encode(CODE_TO_IDENTIFY)
logits = model(input_ids)[0]
language_idx = logits.argmax() # 铆ndice para la etiqueta resultante
de transformers import TextClassificationPipeline
pipeline = TextClassificationPipeline(
model=RobertaForSequenceClassification.from_pretrained(CODEBERTA_LANGUAGE_ID),
tokenizer=RobertaTokenizer.from_pretrained(CODEBERTA_LANGUAGE_ID)
)
pipeline(CODE_TO_IDENTIFY)
# Comenzando con algo muy f谩cil:
pipeline("""
def f(x):
return x**2
""")
# [{'label': 'python', 'score': 0.9999965}]
# Ahora probemos muestras de c贸digo m谩s cortas:
pipeline("const foo = 'bar'")
# [{'label': 'javascript', 'score': 0.9977546}]
# 驴Qu茅 pasa si removemos el token const de la asignaci贸n?
pipeline("foo = 'bar'")
# [{'label': 'javascript', 'score': 0.7176245}]
# Por alguna raz贸n, esto sigue siendo estad铆sticamente detectado como c贸digo JS, aunque tambi茅n es un c贸digo Python v谩lido. Sin embargo, si lo ajustamos un poco:
pipeline("foo = u'bar'")
# [{'label': 'python', 'score': 0.7638422}]
# Ahora es detectado como Python (Nota el modificador de cadena u).
# Probemos con lenguajes m谩s elegantes:
pipeline("echo $FOO")
# [{'label': 'php', 'score': 0.9995257}]
# (S铆, us茅 la palabra "elegante" para describir PHP 馃槄)
pipeline("outcome := rand.Intn(6) + 1")
# [{'label': 'go', 'score': 0.9936151}]
# 驴Por qu茅 el problema de identificaci贸n de lenguajes es tan f谩cil (con las herramientas correctas)? Porque la sintaxis del c贸digo es r铆gida, y tokens simples como := (el operador de asignaci贸n en Go) son predictores perfectos del lenguaje subyacente:
pipeline(":=")
# [{'label': 'go', 'score': 0.9998052}]
# Por cierto, porque entrenamos nuestro propio tokenizer en el conjunto de datos CodeSearchNet, y maneja flujos de bytes de una manera muy gen茅rica, las construcciones sint谩cticas como := est谩n representadas por un solo token:
self.tokenizer.encode(" :=", add_special_tokens=False)
# [521]
Funcionalidades
- Clasificaci贸n de lenguajes de programaci贸n
- Uso de Transformers
- Compatible con PyTorch
- Compatible con TensorFlow
- Compatible con JAX
- Soporte para Rust
- Basado en RoBERTa
- Utiliza el dataset code_search_net
- Proporciona acceso a modelos preentrenados y optimizados
- Compatible con AutoTrain y Endpoints
Casos de uso
- Identificaci贸n de lenguajes de programaci贸n en fragmentos de c贸digo.
- Clasificaci贸n de secuencias de c贸digo en diferentes lenguajes.
- Evaluaci贸n de precisi贸n en tareas de identificaci贸n de lenguajes de programaci贸n.
- Entrenamiento y ajuste fino de modelos para tareas de clasificaci贸n de c贸digo.
- Uso en aplicaciones que requieren clasificaci贸n de lenguajes de programaci贸n en tiempo real.